Toast Engine
Loading...
Searching...
No Matches
layers.hpp
Go to the documentation of this file.
1
7
8#pragma once
9#include <cstdint>
10#include <string>
11#include <string_view>
12#include <toast/export.hpp>
13#include <vector>
14
15namespace physics {
16
17inline constexpr int k_layer_count = 32;
18inline constexpr uint32_t k_all_layers = 0xFFFF'FFFFu;
19inline constexpr size_t k_layer_abbreviation_length = 3;
20
21enum BuiltinLayer : uint8_t {
22 default_layer = 0,
23 trigger_layer,
24 characters_layer,
25 player_layer,
26 small_debris_layer,
27 large_debris_layer,
28 projectiles_layer,
29};
30
31[[nodiscard]]
32constexpr auto layerBit(int layer) -> uint32_t {
33 return layer >= 0 && layer < k_layer_count ? 1u << static_cast<uint32_t>(layer) : 0u;
34}
35
37 uint32_t included = layerBit(default_layer);
38 uint32_t excluded = 0;
39};
40
44constexpr void includeLayer(LayerFilter& filter, int layer, bool value) {
45 const uint32_t bit = layerBit(layer);
46 filter.included = value ? filter.included | bit : filter.included & ~bit;
47 if (value) {
48 filter.excluded &= ~bit;
49 }
50}
51
52constexpr void excludeLayer(LayerFilter& filter, int layer, bool value) {
53 const uint32_t bit = layerBit(layer);
54 filter.excluded = value ? filter.excluded | bit : filter.excluded & ~bit;
55 if (value) {
56 filter.included &= ~bit;
57 }
58}
59
60[[nodiscard]]
61constexpr auto layersCollide(LayerFilter a, LayerFilter b) -> bool {
62 return (a.included & b.included) != 0 && (a.excluded & b.included) == 0 && (b.excluded & a.included) == 0;
63}
64
66[[nodiscard]]
67TOAST_API auto layerMask(const std::vector<int>& layers) -> uint32_t;
68
70[[nodiscard]]
71TOAST_API auto getLayer(std::string_view name) -> int;
72
73[[nodiscard]]
74TOAST_API auto layerName(int layer) -> std::string;
75
76[[nodiscard]]
77TOAST_API auto layerAbbreviation(int layer) -> std::string;
78
79void registerLayerSettings();
80
81}
constexpr void includeLayer(LayerFilter &filter, int layer, bool value)
Definition layers.hpp:44
Definition layers.hpp:36