diff options
Diffstat (limited to 'source/Ires.hpp')
-rw-r--r-- | source/Ires.hpp | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/source/Ires.hpp b/source/Ires.hpp index b6e351c..5875264 100644 --- a/source/Ires.hpp +++ b/source/Ires.hpp @@ -14,6 +14,8 @@ // Forward declarations class EditorInstance; class IresManager; +class IresWritingContext; +class IresLoadingContext; class IresObject : public RefCounted { friend class IresManager; @@ -21,6 +23,7 @@ class IresObject : public RefCounted { public: enum Kind { KD_Texture, + KD_Shader, KD_Material, KD_SpriteFiles, KD_Spritesheet, @@ -49,22 +52,45 @@ public: void SetName(std::string name); const Uid& GetUid() const { return mUid; } + static void ShowNullName(EditorInstance& editor, Kind kind); void ShowName() const; void ShowFullName() const; + + static void ShowNullReference(EditorInstance& editor, Kind kind); virtual void ShowReference(EditorInstance& editor); virtual void ShowEditor(EditorInstance& editor); EditorAttachment* GetEditorAttachment() const { return mEditorAttachment.get(); } void SetEditorAttachment(EditorAttachment* attachment) { mEditorAttachment.reset(attachment); } - static void WriteFull(IresObject* ires, rapidjson::Value& value, rapidjson::Document& root); - static std::unique_ptr<IresObject> ReadFull(const rapidjson::Value& value); - static bool ReadPartial(IresObject* ires, const rapidjson::Value& value); - virtual void Write(rapidjson::Value& value, rapidjson::Document& root) const; - virtual void Read(const rapidjson::Value& value); + static void WriteFull(IresWritingContext& ctx, IresObject* ires, rapidjson::Value& value, rapidjson::Document& root); + + /// Sequentially call ReadBasic() and then ReadPartial() + static std::unique_ptr<IresObject> ReadFull(IresLoadingContext& ctx, const rapidjson::Value& value); + /// Reads the type and UID of the object from data, and return a newly constructed Ires object. + static std::unique_ptr<IresObject> ReadBasic(const rapidjson::Value& value); + /// Reads all object-speific data from the root-level data object into the given Ires object. + static bool ReadPartial(IresLoadingContext& ctx, IresObject* ires, const rapidjson::Value& value); + + virtual void Write(IresWritingContext& ctx, rapidjson::Value& value, rapidjson::Document& root) const; + virtual void Read(IresLoadingContext& ctx, const rapidjson::Value& value); + +protected: + rapidjson::Value WriteIresRef(IresObject* object); +}; + +class IresWritingContext { +public: + virtual ~IresWritingContext() = default; +}; + +class IresLoadingContext { +public: + virtual ~IresLoadingContext() = default; + virtual IresObject* FindIres(const Uid& uid) const = 0; }; -class IresManager { +class IresManager final : public IresWritingContext, public IresLoadingContext { public: static inline IresManager* instance = nullptr; @@ -85,5 +111,5 @@ public: void Save(IresObject* ires, const std::filesystem::path& filePath); const auto& GetObjects() const { return mObjByUid; } - IresObject* FindIres(const Uid& uid); + virtual IresObject* FindIres(const Uid& uid) const override; }; |