From ca4cb5ad971ae76f4576b131099999e2d2633c66 Mon Sep 17 00:00:00 2001 From: LaG1924 <12997935+LaG1924@users.noreply.github.com> Date: Sun, 1 Jul 2018 05:30:44 +0500 Subject: BlockModels are using asset tree now --- src/AssetManager.hpp | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'src/AssetManager.hpp') diff --git a/src/AssetManager.hpp b/src/AssetManager.hpp index 5273a2a..cfeb91a 100644 --- a/src/AssetManager.hpp +++ b/src/AssetManager.hpp @@ -143,14 +143,19 @@ inline bool operator==(const BlockModel::ElementData::FaceData::Uv &lhs, } struct Asset { - virtual ~Asset(); + virtual ~Asset() {}; }; struct AssetTreeNode { std::vector> childs; + std::vector data; std::string name; - AssetTreeNode *parent; std::unique_ptr asset; + AssetTreeNode *parent; +}; + +struct AssetBlockModel : Asset { + BlockModel blockModel; }; class AssetManager { @@ -158,7 +163,6 @@ class AssetManager { std::map assetIds; std::map assetTextures; std::map textureAtlasIndexes; - std::map models; std::map blockIdToBlockName; std::unique_ptr assetTree; public: @@ -184,8 +188,6 @@ public: const BlockModel *GetBlockModelByBlockId(BlockId block); - void LoadBlockModels(); - std::string GetAssetNameByBlockId(BlockId block); void ParseBlockModels(); @@ -194,22 +196,17 @@ public: template T *GetAsset(const std::string &assetName) { - AssetTreeNode *node = assetTree.get(); - unsigned int pos = 1; - unsigned int prevPos = 1; - size_t x = assetName.size(); - while (pos < assetName.size()) { - for (; assetName[pos] != '/' && pos < assetName.size(); pos++); - std::string dirName = assetName.substr(prevPos, pos - prevPos); - for (const auto &asset : node->childs) { - if (asset->name == dirName) { - node = asset.get(); - break; - } - } - pos++; - prevPos = pos; - } + AssetTreeNode *node = GetAssetByAssetName(assetName); + if (!node) + return nullptr; return dynamic_cast(node->asset.get()); } + + void ParseAsset(AssetTreeNode &node); + + void ParseAssetBlockModel(AssetTreeNode &node); + + void RecursiveWalkAsset(const std::string &assetPath, std::function fnc); + + AssetTreeNode *GetAssetByAssetName(const std::string &assetName); }; -- cgit v1.2.3