9#include "components/ErrorUtils.hpp"
13#include "VEX/VEX_export.h"
16#include <unordered_map>
23class VEX_EXPORT GameObjectFactory {
35 return new T(engine, name);
43 static_assert(std::is_base_of_v<GameObject, T>,
"T must derive from GameObject");
54 GameObject* create(
const std::string& type,
Engine& engine,
const std::string& name);
58 std::vector<std::string> GetAllRegisteredObjectTypes();
62 std::vector<std::string> GetNonDynamicRegisteredObjectTypes();
66 std::vector<std::string> GetDynamicRegisteredObjectTypes();
70 void clearDynamicGameObjects();
74 void UnregisterGameObjects();
85 void registerCreator(
const std::string& name, ObjectConstructor ctor,
bool isDynamic);
87 std::unordered_map<std::string, Creator> creators;
88 std::vector<std::string> dynamicTypes;
89 std::vector<std::string> nonDynamicTypes;
90 std::vector<std::string> allTypes;
103#ifdef GAME_MODULE_EXPORTS
104 #define REGISTER_GAME_OBJECT(ClassName) \
106 struct ClassName##Registrar { \
107 ClassName##Registrar() { \
108 GameObjectFactory::getInstance().registerClass<ClassName>(#ClassName, true); \
111 static ClassName##Registrar ClassName##registrar; \
114 #define REGISTER_GAME_OBJECT(ClassName) \
116 struct ClassName##Registrar { \
117 ClassName##Registrar() { \
118 GameObjectFactory::getInstance().registerClass<ClassName>(#ClassName, false); \
121 static ClassName##Registrar ClassName##registrar; \
Contains basic components like transform, camera, name components..
Contains main Engine class.
This file defines the GameObject class.
Class for interaction with engine systems.
Class responsible for registering and then creating GameObjects eg. Player, CameraObject....
void registerCreator(const std::string &name, ObjectConstructor ctor, bool isDynamic)
Registers a creator function for a specific GameObject type string.
static GameObject * constructObject(Engine &engine, const std::string &name)
constructs registered objects, used internally in scene loading.
static GameObjectFactory & getInstance()
Get the singleton instance of the GameObjectFactory.
void registerClass(const std::string &name, bool isDynamic=false)
Register a GameObject class with the factory.
Its base class for all game objects, eg. Player, Enemy, Weapon. Your Class needs to inherit from it.