aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api/Scene.h
diff options
context:
space:
mode:
authorheavydemon21 <nielsstunnebrink1@gmail.com>2024-11-26 09:50:46 +0100
committerheavydemon21 <nielsstunnebrink1@gmail.com>2024-11-26 09:50:46 +0100
commit20ff7753942de3f8eb95d4dee307dc643bc66153 (patch)
tree586e20206060b2fd4b3f642a6a5e69fa35a4c043 /src/crepe/api/Scene.h
parent9aca3626e31a7549f8c436672d4f479bd64c0057 (diff)
parentbe5ccbe24086d5d4fb407f268c649dcbc36eda6b (diff)
Merge branch 'master' into niels/decoupling_pixel_and_pos
Diffstat (limited to 'src/crepe/api/Scene.h')
-rw-r--r--src/crepe/api/Scene.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/crepe/api/Scene.h b/src/crepe/api/Scene.h
index 869bf6f..f6fdb2a 100644
--- a/src/crepe/api/Scene.h
+++ b/src/crepe/api/Scene.h
@@ -2,6 +2,8 @@
#include <string>
+#include "../util/OptionalRef.h"
+
namespace crepe {
class SceneManager;
@@ -15,11 +17,8 @@ class ComponentManager;
*/
class Scene {
protected:
- //TODO: Use Loek's custom reference class to set ComponentManger via SceneManager instead of via constructor
- /**
- * \param mgr Reference to the ComponentManager
- */
- Scene(ComponentManager & mgr);
+ // NOTE: This must be the only constructor on Scene, see "Late references" below
+ Scene() = default;
//! SceneManager instances Scene
friend class SceneManager;
@@ -36,8 +35,20 @@ public:
virtual std::string get_name() const = 0;
protected:
+ /**
+ * \name Late references
+ *
+ * These references are set by SceneManager immediately after calling the constructor of Scene.
+ *
+ * \note Scene must have a constructor without arguments so the game programmer doesn't need to
+ * manually add `using Scene::Scene` to their concrete scene class, if they want to add a
+ * constructor with arguments (e.g. for passing references to their own concrete Scene classes).
+ *
+ * \{
+ */
//! Reference to the ComponentManager
- ComponentManager & component_manager;
+ OptionalRef<ComponentManager> component_manager;
+ //! \}
};
} // namespace crepe