From 5424a1d5434e3ddd911a504719918c2df027e2fd Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 17 Apr 2022 20:08:57 -0700 Subject: Changeset: 8 Initial work on sprites and texture system --- source/Ires.hpp | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 source/Ires.hpp (limited to 'source/Ires.hpp') diff --git a/source/Ires.hpp b/source/Ires.hpp new file mode 100644 index 0000000..66a931e --- /dev/null +++ b/source/Ires.hpp @@ -0,0 +1,73 @@ +#pragma once + +#include "EditorAttachment.hpp" +#include "RcPtr.hpp" +#include "Utils.hpp" + +#include +#include +#include +#include +#include + +// Forward declarations +class IresObject; +class IresManager; + +class IresObject : public RefCounted { + friend class IresManager; + +public: + enum Kind { + KD_Texture, + KD_SpriteFiles, + KD_Spritesheet, + KD_COUNT, + }; + +private: + std::string mName; + std::unique_ptr mEditorAttachment; + IresManager* mMan = nullptr; + Kind mKind; + +public: + IresObject(Kind kind); + virtual ~IresObject() = default; + + static std::string_view ToString(Kind kind); + static Kind FromString(std::string_view name); + static std::unique_ptr Create(Kind kind); + Kind GetKind() const { return mKind; } + + IresManager* GetAssociatedManager() const { return mMan; } + bool IsAnnoymous() const; + const std::string& GetName() const { return mName; } + + EditorAttachment* GetEditorAttachment() const { return mEditorAttachment.get(); } + void SetEditorAttachment(EditorAttachment* attachment) { mEditorAttachment.reset(attachment); } + + static rapidjson::Value WriteFull(const IresObject& ires, rapidjson::Document& root); + static std::unique_ptr ReadFull(const rapidjson::Value& value); + virtual void Write(rapidjson::Value& value, rapidjson::Document& root) const = 0; + virtual void Read(const rapidjson::Value& value) = 0; +}; + +class IresManager { +public: + static inline IresManager* instance = nullptr; + +private: + robin_hood::unordered_map, StringHash, StringEqual> mObjects; + +public: + void DiscoverFilesDesignatedLocation(); + void DiscoverFiles(const std::filesystem::path& dir); + + std::pair Add(IresObject* mat); + void Delete(IresObject* ires); + bool Rename(IresObject* ires, std::string newName); + + const auto& GetObjects() const { return mObjects; } + IresObject* FindIres(std::string_view path); +}; -- cgit v1.2.3-70-g09d2