2#include "scene/Component.h"
7#include <glm/gtc/quaternion.hpp>
8#include <glm/mat4x4.hpp>
20 virtual void Update(
float deltaTime);
21 const std::string&
GetName()
const;
22 void SetName(
const std::string& name);
33 template<
typename T,
typename =
typename std::enable_if_t<std::is_base_of_v<Component, T>>>
36 size_t typeId = Component::StaticTypeId<T>();
40 if (component->GetTypeId() == typeId)
42 return static_cast<T*
>(component.get());
68 void SetScale(
const glm::vec3& scale);
89 glm::quat
m_rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f);
126 std::unordered_map<std::string, std::unique_ptr<ObjectCreatorBase>> m_creators;
129#define GAMEOBJECT(ObjectClass) \
131 static void Register() { eng::GameObjectFactory::GetInstance().RegisterObject<ObjectClass>(std::string(#ObjectClass)); }
void RegisterObject(const std::string &name)
static GameObjectFactory & GetInstance()
GameObject * CreateGameObject(const std::string &typeName)
virtual void Update(float deltaTime)
glm::quat GetWorldRotation()
const glm::quat & GetRotation() const
static GameObject * LoadGLTF(const std::string &path, Scene *scene)
glm::mat4 GetWorldTransform2D() const
const std::string & GetName() const
GameObject * FindChildByName(const std::string &name)
virtual ~GameObject()=default
glm::mat4 GetLocalTransform() const
void SetWorldRotation(const glm::quat &rot)
glm::vec3 GetWorldPosition() const
void SetPosition2D(const glm::vec2 &pos)
std::vector< std::unique_ptr< Component > > m_components
glm::vec2 GetPosition2D() const
void SetRotation2D(float rotation)
float GetRotation2D() const
void SetPosition(const glm::vec3 &pos)
void SetScale(const glm::vec3 &scale)
virtual void LoadProperties(const nlohmann::json &json)
bool SetParent(GameObject *parent)
void SetWorldPosition(const glm::vec3 &pos)
glm::mat4 GetLocalTransform2D() const
void AddComponent(Component *component)
const glm::vec3 & GetPosition() const
void SetActive(bool active)
void SetName(const std::string &name)
const glm::vec3 & GetScale() const
void SetScale2D(const glm::vec2 &scale)
glm::vec2 GetWorldPosition2D() const
glm::vec2 GetScale2D() const
glm::mat4 GetWorldTransform() const
void SetRotation(const glm::quat &rot)
std::vector< std::unique_ptr< GameObject > > m_children
virtual ~ObjectCreatorBase()=default
virtual GameObject * CreateGameObject()=0
virtual GameObject * CreateGameObject() override