VEX Engine
Retro looking game engine made in vulkan mostly because i wanted to understand it better.
Loading...
Searching...
No Matches
GameObjectFactory.cpp
2#include <algorithm>
3
4namespace vex {
5
6 GameObjectFactory& GameObjectFactory::getInstance() {
7 static GameObjectFactory instance;
8 return instance;
9 }
10
11 void GameObjectFactory::registerCreator(const std::string& name, ObjectConstructor ctor, bool isDynamic) {
12 creators[name] = [ctor, name](Engine& e, const std::string& instanceName) -> GameObject* {
13 GameObject* obj = ctor(e, instanceName);
14 obj->setObjectType(name);
15 return obj;
16 };
17
18 allTypes.push_back(name);
19
20 if (isDynamic) {
21 dynamicTypes.push_back(name);
22 } else {
23 nonDynamicTypes.push_back(name);
24 }
25 }
26
27 GameObject* GameObjectFactory::create(const std::string& type, Engine& engine, const std::string& name) {
28 auto it = creators.find(type);
29 if (it != creators.end()) {
30 return it->second(engine, name);
31 }
32 log("Error: Type '%s' not registered", type.c_str());
33 return nullptr;
34 }
35
37 return allTypes;
38 }
39
41 return nonDynamicTypes;
42 }
43
45 return dynamicTypes;
46 }
47
49 if(dynamicTypes.empty()) return;
50
51 log("Hot Reload: Clearing %zu dynamic GameObjects...", dynamicTypes.size());
52 for(const auto& name : dynamicTypes) {
53 creators.erase(name);
54 }
55 dynamicTypes.clear();
56 allTypes = nonDynamicTypes;
57 }
58
60 creators.clear();
61 dynamicTypes.clear();
62 nonDynamicTypes.clear();
63 allTypes.clear();
64 }
65}
This file defines GameObjectFactory class used to auto register GameObjects.
Class for interaction with engine systems.
Definition Engine.hpp:47
void registerCreator(const std::string &name, ObjectConstructor ctor, bool isDynamic)
Registers a creator function for a specific GameObject type string.
GameObject * create(const std::string &type, Engine &engine, const std::string &name)
Create a GameObject instance of the specified type string.
static GameObjectFactory & getInstance()
Get the singleton instance of the GameObjectFactory.
std::vector< std::string > GetDynamicRegisteredObjectTypes()
Get all dynamic registered object types.
std::vector< std::string > GetNonDynamicRegisteredObjectTypes()
Get all non-dynamic registered object types.
void UnregisterGameObjects()
Unregisters all GameObjects and clears internal lists.
void clearDynamicGameObjects()
Clears all GameObjects registered as dynamic.
std::vector< std::string > GetAllRegisteredObjectTypes()
Get all registered object types.
Its base class for all game objects, eg. Player, Enemy, Weapon. Your Class needs to inherit from it.
void setObjectType(const std::string &type)
Function that sets the type of the GameObject.
void VEX_EXPORT log(const char *fmt,...)
Logs a formatted message.