2#include "ComponentFactory.h"
4Map<int, Ref<Vivid::Component>> g_Components;
5Map<int, Ref<Vivid::Entity>> g_Entities;
7int Vivid::ECS::s_EntityID = 0;
8int Vivid::ECS::s_ComponentID = 0;
10bool Vivid::ECS::AddComponent(
int componentID,
int entityID)
14 Ref<Component> component = g_Components[componentID];
15 const ComponentType ct = component->GetComponentType();
17 const int index = g_Entities[entityID]->HasComponent(ct);
18 Ref<Entity> entity = g_Entities[entityID];
21 const String& componentName = g_AllComponentStrings.at(ct);
22 std::cerr << componentName <<
" already exists\n"
24 std::cout <<
"Updating component: " << componentName << std::endl;
26 entity->RemoveComponent(componentID);
29 component->SetEntity(entity->GetEntityID());
31 g_Components[componentID] = component;
32 entity->AddComponent(componentID);
36bool Vivid::ECS::RemoveComponent(
int componentID,
int entityID)
38 Ref<Component> component = g_Components[componentID];
39 const ComponentType ct = component->GetComponentType();
41 const int index = g_Entities[entityID]->HasComponent(ct);
42 Ref<Entity> entity = g_Entities[index];
43 component->SetEntity(entity->GetEntityID());
45 for (
auto&& comp : g_Components)
47 if (comp.second->GetComponentType() == component->GetComponentType())
49 entity->RemoveComponent(componentID);
50 auto it = g_Components.find(comp.first);
51 g_Components.erase(it);
56 const String& componentName = g_AllComponentStrings.at(ct);
57 std::cerr <<
"Failed to remove component: " << componentName << std::endl;
61void Vivid::ECS::Draw(
Camera* camera)
63 for (
auto& entity : g_Entities)
65 entity.second->Draw(camera);
69void Vivid::ECS::ImGuiRender()
71 for (
auto& entity : g_Entities)
73 entity.second->ImguiRender();
77Ref<Vivid::Entity> Vivid::ECS::CreateEntity(
const String& name)
79 Ref<Entity> entity = MakeRef<Entity>(s_EntityID, name);
80 g_Entities[entity->GetEntityID()] = entity;
85 auto tc = ECS::CreateComponent<TransformComponent>();
86 AddComponent(tc->GetComponentID(), entity->GetEntityID());
90Ref<Vivid::Component> Vivid::ECS::GetComponent(ComponentType ct,
int entityID)
92 int componentID = g_Entities[entityID]->HasComponent(ct);
94 if (componentID == -1)
98 return g_Components[componentID];
A class that represents the camera.