aboutsummaryrefslogtreecommitdiff
path: root/source/Ires.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Ires.hpp')
-rw-r--r--source/Ires.hpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/source/Ires.hpp b/source/Ires.hpp
index 9b055af..f821d87 100644
--- a/source/Ires.hpp
+++ b/source/Ires.hpp
@@ -2,6 +2,7 @@
#include "EditorAttachment.hpp"
#include "RcPtr.hpp"
+#include "Uid.hpp"
#include "Utils.hpp"
#include <rapidjson/fwd.h>
@@ -26,10 +27,11 @@ public:
};
private:
- std::string mName;
- std::unique_ptr<EditorAttachment> mEditorAttachment;
- IresManager* mMan = nullptr;
- Kind mKind;
+ std::string mName; // Serialized as filename
+ Uid mUid; // Serialized in full mode
+ std::unique_ptr<EditorAttachment> mEditorAttachment; // Transient
+ IresManager* mMan = nullptr; // Transient
+ Kind mKind; // Serialized in full mode
public:
IresObject(Kind kind);
@@ -44,6 +46,7 @@ public:
bool IsAnnoymous() const;
const std::string& GetName() const { return mName; }
void SetName(std::string name);
+ const Uid& GetUid() const { return mUid; }
virtual void ShowEditor(EditorInstance& editor);
@@ -53,8 +56,8 @@ public:
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 = 0;
- virtual void Read(const rapidjson::Value& value) = 0;
+ virtual void Write(rapidjson::Value& value, rapidjson::Document& root) const;
+ virtual void Read(const rapidjson::Value& value);
};
class IresManager {
@@ -62,21 +65,21 @@ public:
static inline IresManager* instance = nullptr;
private:
- robin_hood::unordered_map<std::string_view, RcPtr<IresObject>> mObjects;
+ robin_hood::unordered_map<Uid, RcPtr<IresObject>> mObjByUid;
public:
void DiscoverFilesDesignatedLocation();
void DiscoverFiles(const std::filesystem::path& dir);
std::pair<IresObject*, bool> Add(IresObject* mat);
+ IresObject* Load(const std::filesystem::path& filePath);
void Delete(IresObject* ires);
bool Rename(IresObject* ires, std::string newName);
- IresObject* Load(const std::filesystem::path& path);
void Reload(IresObject* ires);
void Save(IresObject* ires);
void Save(IresObject* ires, const std::filesystem::path& filePath);
- const auto& GetObjects() const { return mObjects; }
- IresObject* FindIres(std::string_view path);
+ const auto& GetObjects() const { return mObjByUid; }
+ IresObject* FindIres(const Uid& uid);
};