TazGraph Project v0.1.0
Loading...
Searching...
No Matches
GECSUtil.h
1#pragma once
2
3#include "./GECSManager.h"
4#include <unordered_map>
5
6// Map of component names to functions for adding components
7static const std::unordered_map<std::string, std::function<void(Entity*)>> addComponentMap = {
8 //{"TransformComponent", [](Entity* entity) { entity->addComponent<TransformComponent>(); }},
9 {"SpriteComponent", [](Entity* entity) {entity->addToGroup(Manager::groupRenderSprites);entity->addComponent<SpriteComponent>(); }},
10 {"ColliderComponent", [](Entity* entity) { entity->addComponent<ColliderComponent>(); }},
11 {"Triangle_w_Color", [](Entity* entity) { entity->addComponent<Triangle_w_Color>(); }},
12 {"Rectangle_w_Color", [](Entity* entity) { entity->addComponent<Rectangle_w_Color>(); }},
13 {"Line_w_Color", [](Entity* entity) { entity->addComponent<Line_w_Color>(); }},
14 {"SpringComponent", [](Entity* entity) { entity->addComponent<SpringComponent>(); }},
15 {"BoxComponent", [](Entity* entity) { entity->addComponent<BoxComponent>(); }},
16 {"SphereComponent", [](Entity* entity) { entity->addComponent<SphereComponent>(); }},
17 {"AnimatorComponent", [](Entity* entity) { entity->addComponent<AnimatorComponent>(); }},
18 {"MovingAnimatorComponent", [](Entity* entity) { entity->addComponent<MovingAnimatorComponent>(); }},
19 {"FlashAnimatorComponent", [](Entity* entity) { entity->addComponent<FlashAnimatorComponent>(); }},
20 {"LineFlashAnimatorComponent", [](Entity* entity) { entity->addComponent<LineFlashAnimatorComponent>(); }},
21 {"RectangleFlashAnimatorComponent", [](Entity* entity) { entity->addComponent<RectangleFlashAnimatorComponent>(); }},
22 {"RigidBodyComponent", [](Entity* entity) { entity->addComponent<RigidBodyComponent>(); }},
23 {"PortComponent", [](Entity* entity) { entity->addComponent<PortComponent>(); }},
24 {"PortSlotComponent", [](Entity* entity) { entity->addComponent<PortSlotComponent>(); }},
25 {"PathLinkerComponent", [](Entity* entity) { entity->addComponent<PathLinkerComponent>(); }},
26 {"EmptyPythonCodeComponent", [](Entity* entity) { entity->addComponent<EmptyPythonCodeComponent>(); }},
27 {"LinkPythonCodeComponent", [](Entity* entity) { entity->addComponent<LinkPythonCodeComponent>(); }},
28};
29
30// Map of component names to functions for removing components
31static const std::unordered_map<std::string, std::function<void(Entity*)>> removeComponentMap = {
32 //{"TransformComponent", [](Entity* entity) { entity->removeComponent<TransformComponent>(); }},
33 {"SpriteComponent", [](Entity* entity) { entity->removeGroup(Manager::groupRenderSprites); entity->removeComponent<SpriteComponent>(); }},
34 {"ColliderComponent", [](Entity* entity) { entity->removeComponent<ColliderComponent>(); }},
35 {"Triangle_w_Color", [](Entity* entity) { entity->removeComponent<Triangle_w_Color>(); }},
36 {"Rectangle_w_Color", [](Entity* entity) { entity->removeComponent<Rectangle_w_Color>(); }},
37 {"Line_w_Color", [](Entity* entity) { entity->removeComponent<Line_w_Color>(); }},
38 {"SpringComponent", [](Entity* entity) { entity->removeComponent<SpringComponent>(); }},
39 {"BoxComponent", [](Entity* entity) { entity->removeComponent<BoxComponent>(); }},
40 {"SphereComponent", [](Entity* entity) { entity->removeComponent<SphereComponent>(); }},
41 {"AnimatorComponent", [](Entity* entity) { entity->removeComponent<AnimatorComponent>(); }},
42 {"MovingAnimatorComponent", [](Entity* entity) { entity->removeComponent<MovingAnimatorComponent>(); }},
43 {"FlashAnimatorComponent", [](Entity* entity) { entity->removeComponent<FlashAnimatorComponent>(); }},
44 {"LineFlashAnimatorComponent", [](Entity* entity) { entity->removeComponent<LineFlashAnimatorComponent>(); }},
45 {"RectangleFlashAnimatorComponent", [](Entity* entity) { entity->removeComponent<RectangleFlashAnimatorComponent>(); }},
46 {"RigidBodyComponent", [](Entity* entity) { entity->removeComponent<RigidBodyComponent>(); }},
47 {"PortComponent", [](Entity* entity) { entity->removeComponent<PortComponent>(); }},
48 {"PortSlotComponent", [](Entity* entity) { entity->removeComponent<PortSlotComponent>(); }},
49 {"PathLinkerComponent", [](Entity* entity) { entity->removeComponent<PathLinkerComponent>(); }},
50 {"EmptyPythonCodeComponent", [](Entity* entity) { entity->removeComponent<EmptyPythonCodeComponent>(); }},
51 {"LinkPythonCodeComponent", [](Entity* entity) { entity->removeComponent<LinkPythonCodeComponent>(); }},
52};
53
54static const std::unordered_map<std::string, ComponentID> componentNameToID = {
55 {"TransformComponent", GetComponentTypeID<TransformComponent>()},
56 {"SpriteComponent", GetComponentTypeID<SpriteComponent>()},
57 {"ColliderComponent", GetComponentTypeID<ColliderComponent>()},
58 {"Triangle_w_Color", GetComponentTypeID<Triangle_w_Color>()},
59 {"Rectangle_w_Color", GetComponentTypeID<Rectangle_w_Color>()},
60 {"Line_w_Color", GetLinkComponentTypeID<Line_w_Color>()},
61 {"SpringComponent", GetLinkComponentTypeID<SpringComponent>()},
62 {"BoxComponent", GetComponentTypeID<BoxComponent>()},
63 {"SphereComponent", GetComponentTypeID<SphereComponent>()},
64 {"AnimatorComponent", GetComponentTypeID<AnimatorComponent>()},
65 {"MovingAnimatorComponent", GetComponentTypeID<MovingAnimatorComponent>()},
66 {"FlashAnimatorComponent", GetComponentTypeID<FlashAnimatorComponent>()},
67 {"LineFlashAnimatorComponent", GetLinkComponentTypeID<LineFlashAnimatorComponent>()},
68 {"RectangleFlashAnimatorComponent", GetComponentTypeID<RectangleFlashAnimatorComponent>()},
69 {"RigidBodyComponent", GetComponentTypeID<RigidBodyComponent>()},
70 {"PortComponent", GetComponentTypeID<PortComponent>()},
71 {"PortSlotComponent", GetComponentTypeID<PortSlotComponent>()},
72 {"PathLinkerComponent", GetComponentTypeID<PathLinkerComponent>()},
73 {"EmptyPythonCodeComponent", GetComponentTypeID<EmptyPythonCodeComponent>()},
74 {"LinkPythonCodeComponent", GetComponentTypeID<LinkPythonCodeComponent>()},
75};
76
77// Map of component names to functions for getting components
78static const std::unordered_map<std::string, std::function<BaseComponent* (Entity*)>> getComponentMap = {
79 {"TransformComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<TransformComponent>(); }},
80 {"SpriteComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<SpriteComponent>(); }},
81 {"ColliderComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<ColliderComponent>(); }},
82 {"Triangle_w_Color", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<Triangle_w_Color>(); }},
83 {"Rectangle_w_Color", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<Rectangle_w_Color>(); }},
84 {"Line_w_Color", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<Line_w_Color>(); }},
85 {"SpringComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<SpringComponent>(); }},
86 {"BoxComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<BoxComponent>(); } },
87 {"SphereComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<SphereComponent>(); } },
88 {"AnimatorComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<AnimatorComponent>(); }},
89 {"MovingAnimatorComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<MovingAnimatorComponent>(); }},
90 {"FlashAnimatorComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<FlashAnimatorComponent>(); }},
91 {"LineFlashAnimatorComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<LineFlashAnimatorComponent>(); }},
92 {"RectangleFlashAnimatorComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<RectangleFlashAnimatorComponent>(); }},
93 {"RigidBodyComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<RigidBodyComponent>(); }},
94 {"PortComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<PortComponent>(); }},
95 {"PortSlotComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<PortSlotComponent>(); }},
96 {"PathLinkerComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<PathLinkerComponent>(); }},
97 {"EmptyPythonCodeComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<EmptyPythonCodeComponent>(); }},
98 {"LinkPythonCodeComponent", [](Entity* entity) -> BaseComponent* { return &entity->GetComponent<LinkPythonCodeComponent>(); }},
99};
100
101
102// Function to add a component by name
103static void AddComponentByName(const std::string& componentName, Entity* entity) {
104 auto it = addComponentMap.find(componentName);
105 if (it != addComponentMap.end()) {
106 it->second(entity);
107 }
108
109 entity->getManager()->aboutTo_updateActiveEntities();
110}
111
112// Function to remove a component by name
113static void RemoveComponentByName(const std::string& componentName, Entity* entity) {
114 auto it = removeComponentMap.find(componentName);
115 if (it != removeComponentMap.end()) {
116 it->second(entity);
117 }
118
119 entity->getManager()->aboutTo_updateActiveEntities();
120}
121
122// Function to get a component by name
123static BaseComponent* getComponentByName(const std::string& componentName, Entity* entity) {
124 auto it = getComponentMap.find(componentName);
125 if (it != getComponentMap.end()) {
126 return it->second(entity);
127 }
128 return nullptr;
129}
Definition AnimatorComponent.h:13
Definition GECS.h:105
Definition BoxComponent.h:6
Definition ColliderComponent.h:11
Definition EmptyPythonCodeComponent.h:7
Definition GECS.h:224
Definition FlashAnimatorComponent.h:10
Definition LineFlashAnimatorComponent.h:14
Definition Line_w_Color.h:6
Definition LinkPythonCodeComponent.h:7
Definition MovingAnimatorComponent.h:10
Definition PathLinkerComponent.h:6
Definition PortComponent.h:8
Definition PortSlotComponent.h:7
Definition RectangleFlashAnimatorComponent.h:14
Definition Rectangle_w_Color.h:6
Definition RigidBodyComponent.h:5
Definition SphereComponent.h:6
Definition SpringComponent.h:6
Definition SpriteComponent.h:15
Definition TransformComponent.h:7
Definition Triangle_w_Color.h:6