diff options
Diffstat (limited to 'loader/impl.hpp')
| -rw-r--r-- | loader/impl.hpp | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/loader/impl.hpp b/loader/impl.hpp index 08467038..343d3ee1 100644 --- a/loader/impl.hpp +++ b/loader/impl.hpp @@ -1,12 +1,46 @@ #pragma once +#include "loader/loader.hpp" +#include <memory> +#include <vector> +#include <unordered_map> +#include <Corrade/Containers/Optional.h> +#include <Corrade/Containers/StringView.h> +#include <Corrade/Containers/StringStlHash.h> +#include <Corrade/Utility/Resource.h> +#include <Corrade/PluginManager/PluginManager.h> +#include <Magnum/Trade/AbstractImporter.h> namespace floormat { struct anim_def; } -namespace Corrade::Containers { template<typename T> class BasicStringView; using StringView = BasicStringView<const char>; } namespace floormat::loader_detail { -bool chdir(StringView pathname); -anim_def deserialize_anim(StringView filename); -void system_init(); +struct loader_impl final : loader_ +{ + Optional<Utility::Resource> shader_res; + Optional<PluginManager::Manager<Trade::AbstractImporter>> importer_plugins; + Containers::Pointer<Trade::AbstractImporter> image_importer; + Containers::Pointer<Trade::AbstractImporter> tga_importer; + + std::unordered_map<String, std::shared_ptr<struct tile_atlas>> tile_atlas_map; + std::unordered_map<String, std::shared_ptr<struct anim_atlas>> anim_atlas_map; + std::vector<String> anim_atlases; + + StringView shader(StringView filename) override; + Trade::ImageData2D texture(StringView prefix, StringView filename); + std::shared_ptr<struct tile_atlas> tile_atlas(StringView filename, Vector2ub size) override; + ArrayView<String> anim_atlas_list() override; + std::shared_ptr<struct anim_atlas> anim_atlas(StringView name) override; + + void get_anim_atlas_list(); + + static void set_application_working_directory(); + static anim_def deserialize_anim(StringView filename); + static void system_init(); + static bool chdir(StringView pathname); + void ensure_plugins(); + + explicit loader_impl(); + ~loader_impl() override; +}; } // namespace floormat::loader_detail |
