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