diff options
Diffstat (limited to 'src/crepe')
-rw-r--r-- | src/crepe/ComponentManager.cpp | 8 | ||||
-rw-r--r-- | src/crepe/ComponentManager.h | 2 | ||||
-rw-r--r-- | src/crepe/api/Scene.cpp | 2 | ||||
-rw-r--r-- | src/crepe/api/Scene.h | 10 | ||||
-rw-r--r-- | src/crepe/api/SceneManager.hpp | 9 |
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()) { |