From 123f741e3f5374b93ac39887b62bfa0d66762ae2 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 22 May 2022 23:05:03 -0700 Subject: Changeset: 36 Add basic machinery for levels (no saving/loading yet) --- source/GameObject.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'source/GameObject.cpp') diff --git a/source/GameObject.cpp b/source/GameObject.cpp index ce515bd..8bb3ec7 100644 --- a/source/GameObject.cpp +++ b/source/GameObject.cpp @@ -1,15 +1,29 @@ #include "GameObject.hpp" +#include "Level.hpp" #include "Player.hpp" +#include "RapidJsonHelper.hpp" #include "SceneThings.hpp" #include "World.hpp" +#include #include #include using namespace std::literals; namespace ProjectBrussel_UNITY_ID { +GameObject* CreateGameObject(GameObject::Kind kind, GameWorld* world) { + switch (kind) { + case GameObject::KD_Generic: return new GameObject(world); + case GameObject::KD_SimpleGeometry: return new SimpleGeometryObject(world); + case GameObject::KD_Building: return new BuildingObject(world); + case GameObject::KD_LevelWrapper: return new LevelWrapperObject(world); + default: break; + } + return nullptr; +} + bool ValidateGameObjectChild(GameObject* parent, GameObject* child) { return parent->GetWorld() == child->GetWorld(); } @@ -187,6 +201,41 @@ void GameObject::Resleep() { void GameObject::Update() { } +rapidjson::Value GameObject::Serialize(GameObject* obj, rapidjson::Document& root) { + rapidjson::Value result(rapidjson::kObjectType); + + result.AddMember("Type", rapidjson::StringRef(ToString(obj->GetKind())), root.GetAllocator()); + + rapidjson::Value rvValue(rapidjson::kObjectType); + obj->WriteSaveFormat(rvValue, root); + result.AddMember("Value", rvValue, root.GetAllocator()); + + return result; +} + +std::unique_ptr GameObject::Deserialize(const rapidjson::Value& value, GameWorld* world) { + using namespace ProjectBrussel_UNITY_ID; + + auto rvType = rapidjson::GetProperty(value, rapidjson::kStringType, "Type"sv); + if (!rvType) return nullptr; + + auto rvValue = rapidjson::GetProperty(value, rapidjson::kObjectType, "Value"sv); + if (!rvValue) return nullptr; + + auto kind = FromString(rapidjson::AsStringView(*rvType)); + auto obj = std::unique_ptr(CreateGameObject(kind, world)); + if (!obj) return nullptr; + obj->ReadSaveFormat(*rvValue); + + return obj; +} + +void GameObject::ReadSaveFormat(const rapidjson::Value& value) { +} + +void GameObject::WriteSaveFormat(rapidjson::Value& value, rapidjson::Document& root) { +} + void GameObject::SetParent(GameObject* parent) { if (mParent != parent) { mParent = parent; -- cgit v1.2.3-70-g09d2