#ifndef GAMEOBJECT_H #define GAMEOBJECT_H #include "Game/Components/Component.h" #include "Game/TypeMap.h" #include #include "Graphics/global.h" class GameObject { public: GameObject(); ~GameObject(){ std::cout << "deleting" << std::endl; } template void addComponent(std::unique_ptr &&component){ m_components.put(std::forward>(component)); } template bool hasComponent(){ return m_components.contains(); } template T* getComponent(){ auto comp = m_components.find(); assert(comp != m_components.end()); return static_cast(comp->second.get()); } template void removeComponent(){ // auto comp = m_components.find(); // assert(comp != m_components.end()); m_components.remove(); } private: void setPlayerPos(); void makePlayer(); TypeMap> m_components; std::shared_ptr m_object; std::shared_ptr m_object_mt; }; #endif // GAMEOBJECT_H