aboutsummaryrefslogtreecommitdiff
path: root/source/Ires.hpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-04-19 12:36:02 -0700
committerrtk0c <[email protected]>2022-04-19 12:36:02 -0700
commit3290bb2b2dec223f0312c6d5fc3edf71d5d6e46f (patch)
tree1293b330f07ef410b1aea22e338c99c5ca07356b /source/Ires.hpp
parent07e8754e4d799e44678b595177e79e6eaa621268 (diff)
Changeset: 12 Add hardcoded dependencies for IresManager, migrate Shader to Ires
Diffstat (limited to 'source/Ires.hpp')
-rw-r--r--source/Ires.hpp40
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;
};