#pragma once #include "StarThread.hpp" #include "StarJson.hpp" #include "StarUuid.hpp" #include "StarGameTypes.hpp" namespace Star { STAR_CLASS(UniverseSettings); struct PlaceDungeonFlagAction { String dungeonId; String targetInstance; Vec2I targetPosition; }; typedef MVariant UniverseFlagAction; UniverseFlagAction parseUniverseFlagAction(Json const& json); class UniverseSettings { public: UniverseSettings(); UniverseSettings(Json const& json); Json toJson() const; Uuid uuid() const; StringSet flags() const; void setFlag(String const& flag); Maybe> pullPendingFlagActions(); List currentFlagActions() const; List currentFlagActionsForInstanceWorld(String const& instanceName) const; void resetFlags(); private: void loadFlagActions(); mutable Mutex m_lock; Uuid m_uuid; StringSet m_flags; StringMap> m_flagActions; List m_pendingFlagActions; }; }