Nebula
Loading...
Searching...
No Matches
entity.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
20//------------------------------------------------------------------------------
21#include "ids/id.h"
22#include "memdb/tableid.h"
23
24namespace Game
25{
26
27//------------------------------------------------------------------------------
30struct Entity
31{
32 uint32_t index : 22; // 4M concurrent entities
33 uint32_t generation : 10; // 1024 generations per index
34
35 Entity() = default;
36 constexpr Entity(uint32_t id);
37 constexpr Entity(uint32_t generation, uint32_t index);
38
39 static Entity FromId(Ids::Id32 id);
40
41 explicit constexpr operator Ids::Id32() const;
42 static constexpr Entity Invalid();
43 constexpr uint32_t HashCode() const;
44 Entity& operator=(uint32_t rhs);
45 const bool operator==(const Entity& rhs) const;
46 const bool operator!=(const Entity& rhs) const;
47 const bool operator<(const Entity& rhs) const;
48 const bool operator>(const Entity& rhs) const;
49
50 struct Traits;
51};
52
53//------------------------------------------------------------------------------
57{
58 Traits() = delete;
59 using type = Entity;
60 static constexpr auto name = "Entity";
61 static constexpr auto fully_qualified_name = "Game.Entity";
62 static constexpr size_t num_fields = 1;
63 static constexpr const char* field_names[num_fields] = {
64 "id"
65 };
66 static constexpr const char* field_typenames[num_fields] = {
67 "uint"
68 };
69 static constexpr size_t field_byte_offsets[num_fields] = { 0 };
70
73 static constexpr uint32_t fixed_column_index = 0;
74};
75
76//------------------------------------------------------------------------------
85
86//------------------------------------------------------------------------------
89inline constexpr Entity::Entity(uint32_t id)
90{
91 this->index = id & 0x003FFFFF;
92 this->generation = (id & 0xFFC0000) >> 22;
93}
94
95//------------------------------------------------------------------------------
98inline constexpr Entity::Entity(uint32_t generation, uint32_t index)
99{
100 this->index = index;
101 this->generation = generation;
102}
103
104//------------------------------------------------------------------------------
107inline Entity
109{
110 Entity ret;
111 ret.index = id & 0x003FFFFF;
112 ret.generation = (id & 0xFFC0000) >> 22;
113 return ret;
114}
115
116//------------------------------------------------------------------------------
119inline constexpr Game::Entity::operator Ids::Id32() const
120{
121 return ((generation << 22) & 0xFFC0000) + (index & 0x003FFFFF);
122}
123
124//------------------------------------------------------------------------------
127inline constexpr Entity
129{
130 return {0xFFFFFFFF, 0xFFFFFFFF};
131}
132
133//------------------------------------------------------------------------------
136inline constexpr uint32_t
138{
139 return index;
140}
141
142//------------------------------------------------------------------------------
145inline Entity&
147{
148 this->index = id & 0x003FFFFF;
149 this->generation = (id & 0xFFC0000) >> 22;
150 return *this;
151}
152
153//------------------------------------------------------------------------------
156inline const bool
157Entity::operator==(const Entity& rhs) const
158{
159 return Ids::Id32(*this) == Ids::Id32(rhs);
160}
161
162//------------------------------------------------------------------------------
165inline const bool
166Entity::operator!=(const Entity& rhs) const
167{
168 return Ids::Id32(*this) != Ids::Id32(rhs);
169}
170
171//------------------------------------------------------------------------------
174inline const bool
175Entity::operator<(const Entity& rhs) const
176{
177 return index < rhs.index;
178}
179
180//------------------------------------------------------------------------------
183inline const bool
184Entity::operator>(const Entity& rhs) const
185{
186 return index > rhs.index;
187}
188
189} // namespace Game
Definition orientation.h:7
uint32_t Id32
Definition id.h:138
Definition entity.h:57
static constexpr size_t field_byte_offsets[num_fields]
Definition entity.h:69
static constexpr const char * field_names[num_fields]
Definition entity.h:63
static constexpr auto fully_qualified_name
Definition entity.h:61
static constexpr const char * field_typenames[num_fields]
Definition entity.h:66
static constexpr auto name
Definition entity.h:60
static constexpr size_t num_fields
Definition entity.h:62
static constexpr uint32_t fixed_column_index
This is the column that the entity "owner" will reside in, in every table.
Definition entity.h:73
An entity is essentially just an Id with some utility functions attached.
Definition entity.h:31
Entity & operator=(uint32_t rhs)
Definition entity.h:146
constexpr uint32_t HashCode() const
Definition entity.h:137
const bool operator>(const Entity &rhs) const
Definition entity.h:184
static constexpr Entity Invalid()
Definition entity.h:128
Entity()=default
const bool operator==(const Entity &rhs) const
Definition entity.h:157
uint32_t generation
Definition entity.h:33
uint32_t index
Definition entity.h:32
const bool operator!=(const Entity &rhs) const
Definition entity.h:166
static Entity FromId(Ids::Id32 id)
Definition entity.h:108
const bool operator<(const Entity &rhs) const
Definition entity.h:175
Maps an entity to a table and instance id.
Definition entity.h:81
MemDb::RowId instance
Definition entity.h:83
MemDb::TableId table
Definition entity.h:82
row identifier
Definition tableid.h:18
Table identifier.
Definition tableid.h:14