Grindstone Game Engine
v0.2.0
An open source game engine and toolkit.
Toggle main menu visibility
Loading...
Searching...
No Matches
ComponentRegistrar.hpp
1
#pragma once
2
3
#include <unordered_map>
4
#include <string>
5
#include <entt/entt.hpp>
6
7
#include <EngineCore/ECS/EntityHandle.hpp>
8
#include <EngineCore/Reflection/ComponentReflection.hpp>
9
#include <EngineCore/WorldContext/WorldContextManager.hpp>
10
#include <Common/HashedString.hpp>
11
12
#include "ComponentFunctions.hpp"
13
#include "ComponentFunctionsDefinitions.hpp"
14
15
using namespace
Grindstone;
16
17
namespace
Grindstone::ECS {
18
class
ComponentRegistrar
{
19
public
:
20
template
<
typename
ComponentType>
21
void
RegisterComponent(SetupComponentFn setupComponentFn =
nullptr
, DestroyComponentFn destroyComponentFn =
nullptr
) {
22
RegisterComponent(
23
ComponentType::GetComponentHashString(),
24
ComponentFunctions
{
25
setupComponentFn,
26
destroyComponentFn,
27
&ECS::CreateComponent<ComponentType>,
28
&ECS::RemoveComponent<ComponentType>,
29
&ECS::HasComponent<ComponentType>,
30
&ECS::TryGetComponent<ComponentType>,
31
&ECS::GetComponentReflectionData<ComponentType>,
32
&ECS::CopyRegistryComponents<ComponentType>
33
}
34
);
35
}
36
37
template
<
typename
ComponentType>
38
void
UnregisterComponent() {
39
Grindstone::EngineCore
& engineCore = Grindstone::EngineCore::GetInstance();
40
Grindstone::WorldContextManager
* worldContextManager = engineCore.GetWorldContextManager();
41
if
(worldContextManager !=
nullptr
) {
42
for
(
Grindstone::UniquePtr<Grindstone::WorldContextSet>
& worldContext : *worldContextManager) {
43
entt::registry& registry = worldContext.Get()->GetEntityRegistry();
44
registry.clear<ComponentType>();
45
}
46
}
47
48
auto
comp = componentFunctionsList.find(ComponentType::GetComponentHashString());
49
if
(comp != componentFunctionsList.end()) {
50
componentFunctionsList.erase(comp);
51
}
52
}
53
54
virtual
void
CopyRegistry(
WorldContextSet
& to,
WorldContextSet
& from);
55
virtual
void
CallCreateOnRegistry(
WorldContextSet
& worldContextSet);
56
virtual
void
CallDestroyOnRegistry(
WorldContextSet
& worldContextSet);
57
virtual
void
DestroyEntity(
ECS::Entity
entity);
58
virtual
void
RegisterComponent(
Grindstone::HashedString
name,
ComponentFunctions
componentFunctions);
59
virtual
void
UnregisterComponent(
Grindstone::HashedString
name);
60
virtual
void
* CreateComponentWithSetup(
Grindstone::HashedString
name,
ECS::Entity
entity);
61
virtual
void
* CreateComponentWithSetup(
WorldContextSet
& worldContextSet,
Grindstone::HashedString
name,
ECS::Entity
entity);
62
virtual
void
* CreateComponent(
Grindstone::HashedString
name,
ECS::Entity
entity);
63
virtual
void
RemoveComponent(
Grindstone::HashedString
name,
ECS::Entity
entity);
64
virtual
bool
HasComponent(
Grindstone::HashedString
name,
ECS::Entity
entity);
65
virtual
bool
TryGetComponent(
Grindstone::HashedString
name,
ECS::Entity
entity,
void
*& outComponent);
66
virtual
bool
TryGetComponentReflectionData(
Grindstone::HashedString
name,
Grindstone::Reflection::TypeDescriptor_Struct
& outReflectionData);
67
virtual
void
SetupComponent(
Grindstone::HashedString
componentType,
ECS::Entity
entity,
void
* componentPtr);
68
virtual
void
SetupComponent(
WorldContextSet
& worldContextSet,
Grindstone::HashedString
componentType,
ECS::Entity
entity,
void
* componentPtr);
69
70
using
ComponentMap = std::unordered_map<Grindstone::HashedString, ComponentFunctions>;
71
virtual
ComponentMap::iterator begin();
72
virtual
ComponentMap::const_iterator begin()
const
;
73
virtual
ComponentMap::iterator end();
74
virtual
ComponentMap::const_iterator end()
const
;
75
private
:
76
ComponentMap componentFunctionsList;
77
};
78
}
Grindstone::ECS::ComponentFunctions
Definition
ComponentFunctions.hpp:21
Grindstone::ECS::ComponentRegistrar
Definition
ComponentRegistrar.hpp:18
Grindstone::ECS::Entity
Definition
Entity.hpp:15
Grindstone::EngineCore
Definition
EngineCore.hpp:59
Grindstone::HashedString
Definition
HashedString.hpp:9
Grindstone::UniquePtr
Definition
UniquePtr.hpp:7
Grindstone::WorldContextManager
Definition
WorldContextManager.hpp:12
Grindstone::WorldContextSet
Definition
WorldContextSet.hpp:11
Grindstone::Reflection::TypeDescriptor_Struct
Definition
TypeDescriptorStruct.hpp:9
sources
code
EngineCore
ECS
ComponentRegistrar.hpp
Generated by
1.17.0