diff options
Diffstat (limited to 'source/30-game/GameObject.hpp')
-rw-r--r-- | source/30-game/GameObject.hpp | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/source/30-game/GameObject.hpp b/source/30-game/GameObject.hpp deleted file mode 100644 index 40c52e7..0000000 --- a/source/30-game/GameObject.hpp +++ /dev/null @@ -1,107 +0,0 @@ -#pragma once - -#include "EditorAttachment.hpp" -#include "Material.hpp" -#include "Renderer.hpp" -#include "VertexIndex.hpp" - -#include <MacrosCodegen.hpp> -#include <PodVector.hpp> - -#include <rapidjson/fwd.h> -#include <glm/glm.hpp> -#include <glm/gtc/quaternion.hpp> -#include <span> -#include <vector> - -namespace Tags { -enum class GameObjectKind { - // clang-format off - BRUSSEL_ENUM(ToString, FromString, RemovePrefix KD_, AddPrefix GameObject, ExcludeHeuristics) - // clang-format on - - KD_Generic, - KD_Player, - KD_SimpleGeometry, - KD_Building, - KD_LevelWrapper, - KD_COUNT, -}; -} // namespace Tags - -class GameWorld; -class GameObject { - BRUSSEL_CLASS(InheritanceHiearchy) - -public: - using Kind = Tags::GameObjectKind; - using enum Tags::GameObjectKind; - -private: - std::unique_ptr<EditorAttachment> mEditorAttachment; - GameWorld* mWorld; - GameObject* mParent; - PodVector<GameObject*> mChildren; - glm::quat mRot; - glm::vec3 mPos; - glm::vec3 mScale; - Kind mKind; - -protected: - bool mStopFreePropagation : 1 = false; - -public: - static void FreeRecursive(GameObject* object); - - // TODO allow moving between worlds - GameObject(GameWorld* world); - GameObject(Kind kind, GameWorld* world); - virtual ~GameObject(); - - GameObject(const GameObject&) = delete; - GameObject& operator=(const GameObject&) = delete; - GameObject(GameObject&&) = default; - GameObject& operator=(GameObject&&) = default; - - Kind GetKind() const; - - GameWorld* GetWorld() const; - GameObject* GetParent() const; - const PodVector<GameObject*>& GetChildren() const; - void AddChild(GameObject* child); - GameObject* RemoveChild(int index); - GameObject* RemoveChild(GameObject* child); - void RemoveSelfFromParent(); - PodVector<GameObject*> RemoveAllChildren(); - - EditorAttachment* GetEditorAttachment() const { return mEditorAttachment.get(); } - void SetEditorAttachment(EditorAttachment* attachment) { mEditorAttachment.reset(attachment); } - - const glm::vec3& GetPos() const; - void SetPos(const glm::vec3& pos); - - const glm::quat& GetRotation() const; - void SetRotation(const glm::quat& rotation); - - const glm::vec3& GetScale() const; - void SetScale(const glm::vec3& scale); - - // Visuals - virtual std::span<const RenderObject> GetRenderObjects() const; - - // Lifetime hooks - virtual void OnInitialized(); - virtual void Awaken(); - virtual void Resleep(); - virtual void Update(); - - static rapidjson::Value Serialize(GameObject* obj, rapidjson::Document& root); - static std::unique_ptr<GameObject> Deserialize(const rapidjson::Value& value, GameWorld* world); - virtual void ReadSaveFormat(const rapidjson::Value& value); - virtual void WriteSaveFormat(rapidjson::Value& value, rapidjson::Document& root); - -protected: - void SetParent(GameObject* parent); -}; - -#include <generated/GameObject.gh.inl> |