From b35f48a78a0a093b44bb036b6915a6f09f8c02ee Mon Sep 17 00:00:00 2001 From: Danilo Date: Sun, 2 Jun 2024 21:11:19 -0300 Subject: [PATCH] Implementa LoadedAssets em ContentManager --- inc/content/manager.hpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/inc/content/manager.hpp b/inc/content/manager.hpp index 37337c7..813a99a 100644 --- a/inc/content/manager.hpp +++ b/inc/content/manager.hpp @@ -5,6 +5,7 @@ #include "default.hpp" #include "csharp/service.hpp" #include "reader.hpp" +#include namespace xna { //The run-time component which loads managed objects from the binary files produced by the design time content pipeline. @@ -41,12 +42,33 @@ namespace xna { if (assetName.empty()) { return XnaHelper::ReturnDefaultOrNull(); } + + if constexpr (XnaHelper::is_shared_ptr::value) { + + if (_loadedAssets.contains(assetName)) { + auto& voidAsset = _loadedAssets[assetName]; + using TYPE = T::element_type; + auto asset = reinterpret_pointer_cast(voidAsset); + return asset; + } + } const auto obj2 = ReadAsset(assetName); + if constexpr (XnaHelper::is_shared_ptr::value) { + + if(obj2) + _loadedAssets.emplace( assetName, obj2 ); + } + return obj2; } + //Disposes all data that was loaded by this ContentManager. + void Unload() { + _loadedAssets.clear(); + } + //Gets the service provider associated with the main Game. static sptr GameServiceProvider() { return _gameServices; @@ -75,6 +97,7 @@ namespace xna { String _rootDirectory; std::vector byteBuffer; sptr _services = nullptr; + std::map> _loadedAssets; inline static sptr _gameServices = nullptr; inline const static String contentExtension = ".xnb";