aboutsummaryrefslogtreecommitdiff
path: root/source/GameObject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/GameObject.cpp')
-rw-r--r--source/GameObject.cpp87
1 files changed, 43 insertions, 44 deletions
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 <string_view>
#include <utility>
-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*>& 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;
-}
-
-const Material* GameObject::GetMeshMaterial() const {
- return nullptr;
+std::span<const RenderObject> GameObject::GetRenderObjects() const {
+ return {};
}
-const GpuMesh* GameObject::GetMesh() const {
- return nullptr;
+void GameObject::OnInitialized() {
}
void GameObject::Awaken() {