From 8510a85f79f706b93982b4e398b187b5f77081dd Mon Sep 17 00:00:00 2001 From: rtk0c Date: Fri, 3 Jun 2022 22:58:28 -0700 Subject: Changeset: 61 [BUGGED] Move object kind enums to use generated ToString and FromStrong The old mechanism rely on a specific prefix to Ires and GameObject string representations, but the generator currently leaves the enum value. Therefore all editor (e.g. drag & drop) and IO (e.g. ires loading) mechanisms are broken. --- source/30-game/GameObject.cpp | 44 +++++++++++++++---------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) (limited to 'source/30-game/GameObject.cpp') diff --git a/source/30-game/GameObject.cpp b/source/30-game/GameObject.cpp index 8bb3ec7..3b15111 100644 --- a/source/30-game/GameObject.cpp +++ b/source/30-game/GameObject.cpp @@ -2,11 +2,14 @@ #include "Level.hpp" #include "Player.hpp" -#include "RapidJsonHelper.hpp" #include "SceneThings.hpp" #include "World.hpp" +#include +#include + #include +#include #include #include @@ -14,11 +17,12 @@ using namespace std::literals; namespace ProjectBrussel_UNITY_ID { GameObject* CreateGameObject(GameObject::Kind kind, GameWorld* world) { + using enum Tags::GameObjectKind; 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); + case KD_Generic: return new GameObject(world); + case KD_SimpleGeometry: return new SimpleGeometryObject(world); + case KD_Building: return new BuildingObject(world); + case KD_LevelWrapper: return new LevelWrapperObject(world); default: break; } return nullptr; @@ -60,27 +64,6 @@ 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; } @@ -204,7 +187,7 @@ 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()); + result.AddMember("Type", rapidjson::StringRef(Metadata::EnumToString(obj->GetKind())), root.GetAllocator()); rapidjson::Value rvValue(rapidjson::kObjectType); obj->WriteSaveFormat(rvValue, root); @@ -222,8 +205,9 @@ std::unique_ptr GameObject::Deserialize(const rapidjson::Value& valu 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)); + auto kind = Metadata::EnumFromString(rapidjson::AsStringView(*rvType)); + assert(kind.has_value()); + auto obj = std::unique_ptr(CreateGameObject(kind.value(), world)); if (!obj) return nullptr; obj->ReadSaveFormat(*rvValue); @@ -242,3 +226,5 @@ void GameObject::SetParent(GameObject* parent) { // needUpdate(); } } + +#include -- cgit v1.2.3-70-g09d2