aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--src/crepe/api/AssetManager.h45
-rw-r--r--src/crepe/facade/SDLContext.cpp2
-rw-r--r--src/example/rendering.cpp11
4 files changed, 53 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index 180afb8..8bfb819 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,4 +15,4 @@ compile_commands.json
CTestTestfile.cmake
_deps
CMakeUserPresets.json
-
+compile.sh
diff --git a/src/crepe/api/AssetManager.h b/src/crepe/api/AssetManager.h
index fefbed9..68235c3 100644
--- a/src/crepe/api/AssetManager.h
+++ b/src/crepe/api/AssetManager.h
@@ -7,24 +7,69 @@
namespace crepe {
+
+/**
+ * \brief The AssetManager is responsible for storing and managing assets over multiple scenes.
+ *
+ * The AssetManager ensures that assets are loaded once and can be accessed across different scenes.
+ * It caches assets to avoid reloading them every time a scene is loaded. Assets are retained in memory
+ * until the AssetManager is destroyed, at which point the cached assets are cleared.
+ */
class AssetManager {
private:
+ //! A cache that holds all the assets, accessible by their file path, over multiple scenes.
std::unordered_map<std::string, std::any> asset_cache;
private:
+ /**
+ * \brief Private constructor for the AssetManager.
+ *
+ */
AssetManager();
+
+ /**
+ * \brief Private destructor for the AssetManager.
+ *
+ */
virtual ~AssetManager();
public:
+
+ //! Deleted copy constructor to prevent copying of the AssetManager instance.
AssetManager(const AssetManager &) = delete;
+
+ //! Deleted move constructor to prevent moving of the AssetManager instance.
AssetManager(AssetManager &&) = delete;
+
+ //! Deleted copy assignment operator to prevent copying the AssetManager instance.
AssetManager & operator=(const AssetManager &) = delete;
+
+ //! Deleted move assignment operator to prevent moving the AssetManager instance.
AssetManager & operator=(AssetManager &&) = delete;
+ /**
+ * \brief Retrieves the singleton instance of the AssetManager.
+ *
+ * \return A reference to the single instance of the AssetManager.
+ *
+ */
static AssetManager & get_instance();
public:
+ /**
+ * \brief Caches an asset by loading it from the given file path.
+ *
+ * \param[in] file_path The path to the asset file to load.
+ * \param[in] reload If true, the asset will be reloaded from the file, even if it is already cached.
+ * \tparam asset The type of asset to cache (e.g., texture, sound, etc.).
+ *
+ * \return A shared pointer to the cached asset.
+ *
+ * This template function caches the asset at the given file path. If the asset is already cached
+ * and `reload` is false, the existing cached version will be returned. Otherwise, the asset will
+ * be reloaded and added to the cache.
+ */
template <typename asset>
std::shared_ptr<asset> cache(const std::string & file_path,
bool reload = false);
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 39d0d4d..46230b4 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -159,7 +159,7 @@ SDLContext::texture_from_path(const std::string & path) {
SDL_Surface * tmp = IMG_Load(path.c_str());
if (tmp == nullptr) {
- throw Exception("surface cannot be load from %s", path.c_str());
+ tmp = IMG_Load("../asset/texture/ERROR.png");
}
std::unique_ptr<SDL_Surface, std::function<void(SDL_Surface *)>>
diff --git a/src/example/rendering.cpp b/src/example/rendering.cpp
index d554a8a..e02f6a3 100644
--- a/src/example/rendering.cpp
+++ b/src/example/rendering.cpp
@@ -1,3 +1,4 @@
+#include "api/Camera.h"
#include <crepe/ComponentManager.h>
#include <crepe/api/GameObject.h>
#include <crepe/system/RenderSystem.h>
@@ -23,26 +24,26 @@ int main() {
auto obj1 = GameObject(1, "name", "tag", Vector2{500, 0}, 1, 0.1);
auto obj2 = GameObject(2, "name", "tag", Vector2{800, 0}, 1, 0.1);
- auto & mgr = AssetManager::get_instance();
// Normal adding components
{
Color color(0, 0, 0, 0);
obj.add_component<Sprite>(
make_shared<Texture>("../asset/texture/img.png"), color,
- FlipSettings{true, true});
+ FlipSettings{false, false});
+ obj.add_component<Camera>(Color::get_red());
}
-
{
Color color(0, 0, 0, 0);
- auto img = mgr.cache<Texture>("../asset/texture/second.png");
- obj1.add_component<Sprite>(img, color, FlipSettings{true, true});
+ obj1.add_component<Sprite>(make_shared<Texture>("../asset/texture/second.png"), color, FlipSettings{true, true});
}
+ /*
{
Color color(0, 0, 0, 0);
auto img = mgr.cache<Texture>("../asset/texture/second.png");
obj2.add_component<Sprite>(img, color, FlipSettings{true, true});
}
+ */
auto & sys = crepe::RenderSystem::get_instance();
auto start = std::chrono::steady_clock::now();