From 855da86feae1a5cc14dc2d486ccf115f484dbc2e Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 25 Apr 2022 20:22:07 -0700 Subject: Changeset: 16 Initial work on rendering sprites to screen --- source/GameObject.cpp | 87 +++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 44 deletions(-) (limited to 'source/GameObject.cpp') diff --git a/source/GameObject.cpp b/source/GameObject.cpp index 0a063e8..bb86acc 100644 --- a/source/GameObject.cpp +++ b/source/GameObject.cpp @@ -1,55 +1,36 @@ #include "GameObject.hpp" -#include "GameObjectTags.hpp" +#include "Player.hpp" +#include "SceneThings.hpp" #include "World.hpp" #include #include -namespace ProjectBrussel_UNITY_ID { -const char* kNamesGOMM[] = { - "None" /* GOMM_None */, - "AllChildren" /* GOMM_AllChildren */, - "SelfAndAllChildren" /* GOMM_SelfAndAllChildren */, - -}; -const char* kNamesGOT[] = { - "GameObject" /* GOT_Generic */, - "Player" /* GOT_Player */, - "Building" /* GOT_Building */, - "LevelWrapper" /* GOT_LevelWrapper */, -}; +using namespace std::literals; +namespace ProjectBrussel_UNITY_ID { bool ValidateGameObjectChild(GameObject* parent, GameObject* child) { return parent->GetWorld() == child->GetWorld(); } } // namespace ProjectBrussel_UNITY_ID -const char* Tags::NameOf(GameObjectMemoryManagement value) { - return ProjectBrussel_UNITY_ID::kNamesGOMM[value]; -} - -const char* Tags::NameOf(GameObjectType value) { - return ProjectBrussel_UNITY_ID::kNamesGOT[value]; -} - void GameObject::FreeRecursive(GameObject* obj) { - auto gomm = obj->GetMemoryManagement(); - bool freeSelf = gomm != Tags::GOMM_SelfAndAllChildren; - bool freeChildren = gomm != Tags::GOMM_SelfAndAllChildren && gomm != Tags::GOMM_AllChildren; - - if (freeChildren) { + if (!obj->mStopFreePropagation) { for (auto child : obj->GetChildren()) { FreeRecursive(obj); } } - if (freeSelf) { - delete obj; - } + delete obj; } GameObject::GameObject(GameWorld* world) - : mWorld{ world } { + : GameObject(KD_Generic, world) { +} + +GameObject::GameObject(Kind kind, GameWorld* world) + : mWorld{ world } + , mKind{ kind } { } GameObject::~GameObject() { @@ -60,6 +41,31 @@ GameObject::~GameObject() { } } +std::string_view GameObject::ToString(Kind kind) { + switch (kind) { + case KD_Generic: return "GameObject"sv; + case KD_Player: return "Player"sv; + case KD_SimpleGeometry: return "SimpleGeometry"sv; + case KD_Building: return "Building"sv; + case KD_LevelWrapper: return "LevelWrapper"sv; + case KD_COUNT: break; + } + return std::string_view(); +} + +GameObject::Kind GameObject::FromString(std::string_view name) { + if (name == "GameObject"sv) return KD_Generic; + if (name == "Player"sv) return KD_Player; + if (name == "SimpleGeometry"sv) return KD_SimpleGeometry; + if (name == "Building"sv) return KD_Building; + if (name == "LevelWrapper"sv) return KD_LevelWrapper; + return KD_COUNT; +} + +GameObject::Kind GameObject::GetKind() const { + return mKind; +} + GameWorld* GameObject::GetWorld() const { return mWorld; } @@ -73,10 +79,12 @@ const PodVector& GameObject::GetChildren() const { } void GameObject::AddChild(GameObject* child) { + using namespace ProjectBrussel_UNITY_ID; + if (child->mParent) { return; } - if (!ProjectBrussel_UNITY_ID::ValidateGameObjectChild(this, child)) { + if (!ValidateGameObjectChild(this, child)) { return; } @@ -144,20 +152,11 @@ void GameObject::SetRotation(const glm::quat& rotation) { mRot = rotation; } -Tags::GameObjectMemoryManagement GameObject::GetMemoryManagement() const { - return Tags::GOMM_None; -}; - -Tags::GameObjectType GameObject::GetTypeTag() const { - return Tags::GOT_Generic; +std::span GameObject::GetRenderObjects() const { + return {}; } -const Material* GameObject::GetMeshMaterial() const { - return nullptr; -} - -const GpuMesh* GameObject::GetMesh() const { - return nullptr; +void GameObject::OnInitialized() { } void GameObject::Awaken() { -- cgit v1.2.3-70-g09d2