aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/api')
-rw-r--r--src/crepe/api/Audio_asset.cpp16
-rw-r--r--src/crepe/api/Audio_asset.h18
-rw-r--r--src/crepe/api/CMakeLists.txt17
-rw-r--r--src/crepe/api/Image_asset.cpp14
-rw-r--r--src/crepe/api/Image_asset.h18
-rw-r--r--src/crepe/api/map_asset.cpp12
-rw-r--r--src/crepe/api/map_asset.h14
-rw-r--r--src/crepe/api/resource.h23
-rw-r--r--src/crepe/api/resource_manager.cpp25
-rw-r--r--src/crepe/api/resource_manager.h59
-rw-r--r--src/crepe/api/spritesheet.cpp16
-rw-r--r--src/crepe/api/spritesheet.h21
12 files changed, 248 insertions, 5 deletions
diff --git a/src/crepe/api/Audio_asset.cpp b/src/crepe/api/Audio_asset.cpp
new file mode 100644
index 0000000..a9b04ed
--- /dev/null
+++ b/src/crepe/api/Audio_asset.cpp
@@ -0,0 +1,16 @@
+
+
+
+
+#include "Audio_asset.h"
+#include <string>
+
+
+using namespace crepe::api;
+
+Audio::Audio(const std::string& content){
+ this->m_content = content;
+}
+
+Audio::~Audio(){
+}
diff --git a/src/crepe/api/Audio_asset.h b/src/crepe/api/Audio_asset.h
new file mode 100644
index 0000000..0b8e48e
--- /dev/null
+++ b/src/crepe/api/Audio_asset.h
@@ -0,0 +1,18 @@
+#pragma once
+
+
+#include "resource.h"
+#include <string>
+
+
+namespace crepe::api {
+
+
+class Audio : public Resource {
+
+public:
+ Audio(const std::string&);
+ ~Audio();
+
+};
+}
diff --git a/src/crepe/api/CMakeLists.txt b/src/crepe/api/CMakeLists.txt
index feb03ef..4f3fada 100644
--- a/src/crepe/api/CMakeLists.txt
+++ b/src/crepe/api/CMakeLists.txt
@@ -1,11 +1,18 @@
target_sources(crepe PUBLIC
- # AudioSource.cpp
- Resource.cpp
+ Image_asset.cpp
+ map_asset.cpp
+ Audio_asset.cpp
+ spritesheet.cpp
+ resource_manager.cpp
)
target_sources(crepe PUBLIC FILE_SET HEADERS FILES
- AudioSource.h
+ resource.h
+ Image_asset.h
+ map_asset.h
+ Audio_asset.h
+ spritesheet.h
+ resource_manager.h
Component.h
- Resource.h
+ AudioSource.h
)
-
diff --git a/src/crepe/api/Image_asset.cpp b/src/crepe/api/Image_asset.cpp
new file mode 100644
index 0000000..57431c4
--- /dev/null
+++ b/src/crepe/api/Image_asset.cpp
@@ -0,0 +1,14 @@
+
+
+#include "Image_asset.h"
+#include <string>
+
+using namespace crepe::api;
+
+Texture::Texture(const std::string& content){
+ this->m_content = content;
+}
+
+
+Texture::~Texture(){
+}
diff --git a/src/crepe/api/Image_asset.h b/src/crepe/api/Image_asset.h
new file mode 100644
index 0000000..69549af
--- /dev/null
+++ b/src/crepe/api/Image_asset.h
@@ -0,0 +1,18 @@
+#pragma once
+
+
+
+#include "resource.h"
+#include <string>
+
+namespace crepe::api {
+
+
+class Texture : public Resource {
+
+public:
+ Texture(const std::string&);
+ ~Texture();
+};
+
+}
diff --git a/src/crepe/api/map_asset.cpp b/src/crepe/api/map_asset.cpp
new file mode 100644
index 0000000..bbabe2b
--- /dev/null
+++ b/src/crepe/api/map_asset.cpp
@@ -0,0 +1,12 @@
+
+
+
+
+#include "map_asset.h"
+
+Map::Map(const std::string& content){
+ this->m_content = content;
+}
+
+Map::~Map(){
+}
diff --git a/src/crepe/api/map_asset.h b/src/crepe/api/map_asset.h
new file mode 100644
index 0000000..a3b994f
--- /dev/null
+++ b/src/crepe/api/map_asset.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "resource.h"
+#include <string>
+
+
+using namespace crepe::api;
+
+class Map : public Resource {
+
+public:
+ Map(const std::string& );
+ ~Map();
+};
diff --git a/src/crepe/api/resource.h b/src/crepe/api/resource.h
new file mode 100644
index 0000000..e6456f9
--- /dev/null
+++ b/src/crepe/api/resource.h
@@ -0,0 +1,23 @@
+#pragma once
+
+
+#include <string>
+
+namespace crepe::api {
+
+class Resource{
+
+public:
+
+ virtual ~Resource() =default;
+
+ const std::string& getContent() const{
+ return this->m_content;
+ }
+
+protected:
+ std::string m_content;
+};
+
+
+}
diff --git a/src/crepe/api/resource_manager.cpp b/src/crepe/api/resource_manager.cpp
new file mode 100644
index 0000000..a5644ee
--- /dev/null
+++ b/src/crepe/api/resource_manager.cpp
@@ -0,0 +1,25 @@
+
+
+#include "resource_manager.h"
+#include <string>
+#include <unordered_map>
+
+using namespace crepe::api;
+
+ResourceManager* ResourceManager::get_instance(){
+ static ResourceManager instance;
+ return &instance;
+}
+
+
+ResourceManager::~ResourceManager(){
+ m_resources.clear();
+}
+
+
+void ResourceManager::Unload(const std::string& file_path){
+ if(m_resources.find(file_path) != m_resources.end()){
+ m_resources.erase(file_path);
+ }
+}
+
diff --git a/src/crepe/api/resource_manager.h b/src/crepe/api/resource_manager.h
new file mode 100644
index 0000000..1b91524
--- /dev/null
+++ b/src/crepe/api/resource_manager.h
@@ -0,0 +1,59 @@
+#pragma once
+
+
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+#include <utility>
+
+
+#include "api/resource.h"
+#include "fabricator/resource_fabricator.h"
+
+
+ namespace crepe::api{
+
+class ResourceManager{
+
+
+private:
+
+ std::unordered_map< std::string, std::unique_ptr<api::Resource>> m_resources;
+
+
+protected:
+ ResourceManager() = default;
+ ~ResourceManager();
+
+public:
+ ResourceManager(const ResourceManager &) = delete;
+ ResourceManager(ResourceManager &&) = delete;
+ ResourceManager &operator=(const ResourceManager &) = delete;
+ ResourceManager &operator=(ResourceManager &&) = delete;
+
+ static ResourceManager& get_instance();
+
+
+
+public:
+ template<typename T>
+ T* Load(const std::string& file_path){
+
+ if (m_resources.find(file_path) != m_resources.end()) {
+ return static_cast<T*>(m_resources[file_path].get());
+ }
+
+ std::unique_ptr<api::Resource> resource = ResourceFactory::create_resource<T>(file_path);
+ if (resource) {
+ m_resources[file_path] = std::move(resource);
+ return static_cast<T*>(m_resources[file_path].get() );
+ }
+
+ return nullptr;
+ }
+
+ void Unload(const std::string& file_path);
+
+};
+}
diff --git a/src/crepe/api/spritesheet.cpp b/src/crepe/api/spritesheet.cpp
new file mode 100644
index 0000000..f42a782
--- /dev/null
+++ b/src/crepe/api/spritesheet.cpp
@@ -0,0 +1,16 @@
+
+
+#include "spritesheet.h"
+
+#include <string>
+
+using namespace crepe::api;
+
+SpriteSheet::SpriteSheet(const std::string& content){
+ this->m_content = content;
+}
+
+SpriteSheet::~SpriteSheet(){
+}
+
+
diff --git a/src/crepe/api/spritesheet.h b/src/crepe/api/spritesheet.h
new file mode 100644
index 0000000..7f49156
--- /dev/null
+++ b/src/crepe/api/spritesheet.h
@@ -0,0 +1,21 @@
+#pragma once
+
+
+
+
+#include "resource.h"
+#include <string>
+
+
+namespace crepe::api {
+
+
+
+class SpriteSheet : public Resource{
+
+public:
+ SpriteSheet(const std::string&);
+ ~SpriteSheet();
+
+};
+}