aboutsummaryrefslogtreecommitdiff
path: root/src/crepe
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-11-13 18:46:06 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-11-13 18:46:06 +0100
commit0aa97807cb9b7f1d1850449dd5a5e45b961445ce (patch)
tree8f6a808669a39f5b8d91079ecb30c3d1f11e9e02 /src/crepe
parentbc2a31190b5afe7754b04e9c61fcda30e577d7d8 (diff)
fix scene_manager example
Diffstat (limited to 'src/crepe')
-rw-r--r--src/crepe/ComponentManager.cpp8
-rw-r--r--src/crepe/ComponentManager.h2
-rw-r--r--src/crepe/api/Scene.cpp2
-rw-r--r--src/crepe/api/Scene.h10
-rw-r--r--src/crepe/api/SceneManager.hpp9
5 files changed, 19 insertions, 12 deletions
diff --git a/src/crepe/ComponentManager.cpp b/src/crepe/ComponentManager.cpp
index c6b658c..1e23609 100644
--- a/src/crepe/ComponentManager.cpp
+++ b/src/crepe/ComponentManager.cpp
@@ -25,13 +25,11 @@ void ComponentManager::delete_all_components() {
ComponentManager::ComponentManager() { dbg_trace(); }
ComponentManager::~ComponentManager() { dbg_trace(); }
-GameObject & ComponentManager::new_object(const string & name,
+GameObject ComponentManager::new_object(const string & name,
const string & tag,
const Vector2 & position,
double rotation, double scale) {
- GameObject * object = new GameObject(*this, this->next_id, name, tag,
- position, rotation, scale);
- this->objects.push_front(unique_ptr<GameObject>(object));
+ GameObject object{*this, this->next_id, name, tag, position, rotation, scale};
this->next_id++;
- return *object;
+ return object;
}
diff --git a/src/crepe/ComponentManager.h b/src/crepe/ComponentManager.h
index 75606e0..31a8bfa 100644
--- a/src/crepe/ComponentManager.h
+++ b/src/crepe/ComponentManager.h
@@ -101,7 +101,7 @@ public:
std::vector<std::reference_wrapper<T>> get_components_by_type() const;
// TODO: doxygen
- GameObject & new_object(const std::string & name,
+ GameObject new_object(const std::string & name,
const std::string & tag = "",
const Vector2 & position = {0, 0},
double rotation = 0, double scale = 0);
diff --git a/src/crepe/api/Scene.cpp b/src/crepe/api/Scene.cpp
index 933edf4..008d689 100644
--- a/src/crepe/api/Scene.cpp
+++ b/src/crepe/api/Scene.cpp
@@ -2,4 +2,4 @@
using namespace crepe;
-Scene::Scene(const std::string & name) : name(name) {}
+Scene::Scene(ComponentManager & mgr, const std::string & name) : component_manager(mgr), name(name) {}
diff --git a/src/crepe/api/Scene.h b/src/crepe/api/Scene.h
index f8bcc3d..334f306 100644
--- a/src/crepe/api/Scene.h
+++ b/src/crepe/api/Scene.h
@@ -4,14 +4,20 @@
namespace crepe {
+class ComponentManager;
+
class Scene {
public:
- Scene(const std::string & name);
+ Scene(ComponentManager & mgr, const std::string & name);
virtual ~Scene() = default;
+
virtual void load_scene() = 0;
public:
- std::string name;
+ const std::string name;
+
+protected:
+ ComponentManager & component_manager;
};
} // namespace crepe
diff --git a/src/crepe/api/SceneManager.hpp b/src/crepe/api/SceneManager.hpp
index 8bad7b2..714f690 100644
--- a/src/crepe/api/SceneManager.hpp
+++ b/src/crepe/api/SceneManager.hpp
@@ -1,13 +1,16 @@
+#pragma once
+
#include "SceneManager.h"
namespace crepe {
template <typename T>
void SceneManager::add_scene(const std::string & name) {
- static_assert(std::is_base_of<Scene, T>::value,
- "T must be derived from Scene");
+ using namespace std;
+ static_assert(is_base_of<Scene, T>::value, "T must be derived from Scene");
- scenes.emplace_back(make_unique<T>(name));
+ Scene * scene = new T(this->component_manager, name);
+ this->scenes.emplace_back(unique_ptr<Scene>(scene));
// The first scene added, is the one that will be loaded at the beginning
if (next_scene.empty()) {