Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename... Args>
- Entity* CreateEntity(uInt parentID, EEHandle handle, Args... types)
- {
- EntityManager* manager = EntityManager::GetInstance();
- if (!manager) {
- return nullptr;
- }
- //Create Entity
- static uInt ID = 0;
- uInt thisID = ID++;
- auto pair = manager->entities.emplace(handle, std::unique_ptr<Entity>(new Entity(thisID, parentID)));
- if (!pair.second) {
- ErrorLogger::MessageBoxError(L"EntityManager::CreateEntity attempted to replace an existing entity");
- exit(-1);
- }
- Entity* entity = pair.first->second.get();
- manager->entitiesHandles[thisID] = handle;
- //Create Components
- for (auto type : { types... })
- {
- uInt componentID{};
- switch (type)
- {
- case ECType::RectComponent:
- componentID = static_cast<uInt>(manager->rectComponentsVec.size());
- manager->rectComponentsVec.push_back(RectComponent(thisID));
- break;
- default:
- ErrorLogger::MessageBoxError(L"EntityManager::CreateEntity ECType passed is not handled");
- exit(-1);
- break;
- }
- Entity::RegisterComponentID(entity, type, componentID);
- }
- if (parentID != thisID) {
- Entity::RegisterChildID(manager->GetEntity(parentID), thisID);
- }
- return entity;
- }
- template<typename T>
- vector<T>& GetComponentsVector()
- {
- static vector<T> emptyVector;
- EntityManager* manager = EntityManager::GetInstance();
- if (!manager) {
- return emptyVector;
- }
- if constexpr (is_same <T, RectComponent>::value) {
- return manager->rectComponentsVec;
- }
- if constexpr (is_same <T, BoundaryComponent>::value) {
- return manager->boundaryComponentsVec;
- }
- }
- template<typename T>
- vector<T*> GetOwnedComponents(Entity* entity)
- {
- vector<T*> components;
- EntityManager* manager = EntityManager::GetInstance();
- if (!manager) {
- return components;
- }
- if constexpr (is_same <T, RectComponent>::value) {
- for (uInt ID : Entity::GetComponentsID(entity, ECType::RectComponent)) {
- components.push_back(&manager->rectComponentsVec[ID]);
- }
- }
- if constexpr (is_same <T, BoundaryComponent>::value) {
- for (uInt ID : Entity::GetComponentsID(entity, ECType::BoundaryComponent)) {
- components.push_back(&manager->boundaryComponentsVec[ID]);
- }
- }
- return components;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement