Tramway SDK
entity.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_ENTITY_H
4#define TRAM_SDK_FRAMEWORK_ENTITY_H
5
6#include <framework/uid.h>
7#include <framework/core.h>
8#include <framework/math.h>
9#include <framework/value.h>
10#include <framework/signal.h>
11
12namespace tram {
13
14class WorldCell;
15class Message;
16struct SharedEntityData;
17struct ValueArray;
18class File;
19
20typedef Entity* (*entity_make)(const SharedEntityData&, const ValueArray&);
21typedef void (*entity_clear)(Entity*);
22
23class Entity {
24public:
25 virtual void Load() = 0;
26
27 virtual void Unload() = 0;
28
29 virtual void Serialize() = 0;
30
31 Entity();
34
35 virtual ~Entity();
36
37 inline name_t GetName() const { return name; }
38 inline id_t GetID() const { return id; }
39 inline WorldCell* GetCell() { return cell; }
40 inline bool IsLoaded() const { return flags & LOADED; }
41 inline bool IsAutoLoad() const { return !(flags & DISABLE_AUTO_LOAD); }
42 inline bool IsPersistent() const { return !(flags & NON_PERSISTENT); }
43 inline bool IsChanged() const { return flags & DIRTY; }
44 inline bool IsDeleted() const { return flags & DELETED; }
45 inline bool IsLoadedFromDisk() const { return flags & LOADED_FROM_DISK; }
46
47 void virtual UpdateParameters() = 0;
48 void virtual SetParameters() = 0;
49
50 static void Update();
51 void Yeet();
52
53 inline void SetAutoLoad(bool is) { flags = is ? flags & ~DISABLE_AUTO_LOAD : flags | DISABLE_AUTO_LOAD; }
54 inline void SetPersistent(bool is) { flags = is ? flags & ~NON_PERSISTENT : flags | NON_PERSISTENT; }
55
57 void SetRotation(quat rot) { rotation = rot; SetParameters(); }
58
59 inline void UpdateTransform(const vec3& loc, const quat& rot){
60 location = loc;
61 rotation = rot;
64 }
65
66 inline const vec3& GetLocation() { return location; }
67 inline const quat& GetRotation() { return rotation; }
68
69 virtual void MessageHandler(Message& msg) = 0;
70 virtual void EventHandler(Event &event) {};
71
72 virtual name_t GetType() = 0;
73
74 void CheckTransition();
75
76 struct FieldInfo {
77 uint32_t field_id;
79 uint32_t field_flags;
80 };
81
82 enum : uint32_t {
84 };
85
86 static void RegisterType(name_t name, entity_make, entity_clear, const Type* fields, size_t fieldcount);
87 static void RegisterType(name_t name, entity_make, entity_clear, const FieldInfo* fields, size_t fieldcount);
88 static void RegisterType(name_t name, entity_make, entity_clear, std::initializer_list<FieldInfo> fields);
89
90 inline SignalTable* GetSignalTable() { return signals; }
91
92 static Entity* Make(name_t type, File* file);
93 static Entity* Make(name_t type, const SharedEntityData&, const ValueArray&);
94 static Entity* Find(id_t entity_id);
95 static Entity* Find(name_t entity_name);
96protected:
97 enum : uint32_t {
99 LOADED = 2,
102 DIRTY = 16,
105 };
106
107 id_t id = 0;
109
110 WorldCell* cell = nullptr;
111
112 // don't really need this, since we can use the entity ID number to lookup
113 // the SignalTable for each entity
114 // TODO: fix
116
117 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};
118 vec3 location = {0.0f, 0.0f, 0.0f};
119
120 uint32_t flags = 0;
121
122 void Register();
123 void Unregister();
124 inline void FireSignal(signal_t type) { if (signals) signals->Fire(type, this->id); }
125 inline void FireSignal(signal_t type, Value value) { if (signals) signals->Fire(type, this->id, value); }
126
127 inline void SetFlag(uint32_t flag, bool value) { flags = value ? flags | flag : flags & ~flag; }
128
129 friend class WorldCell;
130};
131
134 uint64_t id = 0;
136 uint32_t flags = 0;
137 vec3 position = {0.0f, 0.0f, 0.0f};
138 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};;
139};
140
141}
142
143#endif // TRAM_SDK_FRAMEWORK_ENTITY_H
Entity base class.
Definition: entity.h:23
void SetPersistent(bool is)
Definition: entity.h:54
virtual void Serialize()=0
quat rotation
Definition: entity.h:117
bool IsPersistent() const
Returns the persistence status of an entity.
Definition: entity.h:42
id_t id
Definition: entity.h:107
void CheckTransition()
Check whether an entity has entered a different cell.
Definition: entity.cpp:228
bool IsAutoLoad() const
Returns the auto load flag status.
Definition: entity.h:41
void Register()
Registers the entity.
Definition: entity.cpp:333
virtual void Unload()=0
Unloads an entity.
virtual void EventHandler(Event &event)
Allows entities to receive events.
Definition: entity.h:70
bool IsLoaded() const
Returns the entity load status.
Definition: entity.h:40
SignalTable * signals
Definition: entity.h:115
bool IsDeleted() const
Returns the entity deletion status.
Definition: entity.h:44
virtual void Load()=0
Loads an entity.
void UpdateTransform(const vec3 &loc, const quat &rot)
Definition: entity.h:59
virtual name_t GetType()=0
Returns the type of the entity.
static Entity * Make(name_t type, File *file)
Loads an Entity from a File.
Definition: entity.cpp:417
Entity()
Creates an unnamed entity with a random ID.
Definition: entity.cpp:188
id_t GetID() const
Definition: entity.h:38
void SetFlag(uint32_t flag, bool value)
Definition: entity.h:127
static void RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
Registers a new entity type.
Definition: entity.cpp:266
void SetLocation(vec3 loc)
Definition: entity.h:56
void SetAutoLoad(bool is)
Definition: entity.h:53
virtual ~Entity()
Destructs the entity.
Definition: entity.cpp:221
const vec3 & GetLocation()
Definition: entity.h:66
void Unregister()
Unregisters the entity.
Definition: entity.cpp:348
SignalTable * GetSignalTable()
Definition: entity.h:90
virtual void UpdateParameters()=0
Called when Entity::UpdateTransform is called.
void SetRotation(quat rot)
Definition: entity.h:57
@ FIELD_SERIALIZE
Definition: entity.h:83
WorldCell * GetCell()
Returns the entity's parent cell.
Definition: entity.h:39
vec3 location
Definition: entity.h:118
void FireSignal(signal_t type)
Definition: entity.h:124
@ DISABLE_AUTO_LOAD
Definition: entity.h:100
@ NON_PERSISTENT
Definition: entity.h:98
@ LOADED
Definition: entity.h:99
@ LOADED_FROM_DISK
Definition: entity.h:104
@ DELETED
Definition: entity.h:103
@ NON_SERIALIZABLE
Definition: entity.h:101
@ DIRTY
Definition: entity.h:102
bool IsChanged() const
Definition: entity.h:43
name_t name
Definition: entity.h:108
virtual void SetParameters()=0
Called when either Entity::SetLocation or Entity::SetRotation is called.
bool IsLoadedFromDisk() const
Definition: entity.h:45
void Yeet()
Purges the entity.
Definition: entity.cpp:406
WorldCell * cell
Definition: entity.h:110
virtual void MessageHandler(Message &msg)=0
Allows entities to receive messages.
const quat & GetRotation()
Definition: entity.h:67
uint32_t flags
Definition: entity.h:120
static void Update()
Updates entities.
Definition: entity.cpp:380
static Entity * Find(id_t entity_id)
Finds the entity by its ID number.
Definition: entity.cpp:361
void FireSignal(signal_t type, Value value)
Definition: entity.h:125
name_t GetName() const
Definition: entity.h:37
Very fast file reader/writer.
Definition: file.h:18
List of Message templates.
Definition: signal.h:50
void Fire(signal_t signal, id_t sender)
Definition: signal.cpp:105
Definition: value.h:314
Generic, type-safe union.
Definition: value.h:18
World streaming unit.
Definition: worldcell.h:16
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
Type
Type enumeration for serialization, etc.
Definition: type.h:12
uint32_t signal_t
Definition: signal.h:12
Entity *(* entity_make)(const SharedEntityData &, const ValueArray &)
Definition: entity.h:20
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
void(* entity_clear)(Entity *)
Definition: entity.h:21
Definition: entity.h:76
Type field_type
Definition: entity.h:78
uint32_t field_flags
Definition: entity.h:79
uint32_t field_id
Definition: entity.h:77
Event data.
Definition: event.h:24
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
quat rotation
Definition: entity.h:138
uint32_t flags
Definition: entity.h:136
name_t type
Definition: entity.h:133
name_t name
Definition: entity.h:135
vec3 position
Definition: entity.h:137
Interned string type.
Definition: uid.h:10