From 5df3e0b43ee8ea3914c81086d46a4afaf25a77ee Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sat, 27 Jan 2024 11:19:54 +0200 Subject: [PATCH] Add polymorphism discovery for systems --- source/game/director.cpp | 1 + source/game/stage.h | 10 ++++------ source/game/system.h | 2 ++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/source/game/director.cpp b/source/game/director.cpp index eedc4d5..53c5454 100644 --- a/source/game/director.cpp +++ b/source/game/director.cpp @@ -21,6 +21,7 @@ Director::Director(DataFile::Collection &r): reflector.get_or_create_class(); reflector.get_or_create_class(); + reflector.get_or_create_class(); } // Hide ~unique_ptr from the header diff --git a/source/game/stage.h b/source/game/stage.h index 0095c76..8e98d76 100644 --- a/source/game/stage.h +++ b/source/game/stage.h @@ -86,13 +86,11 @@ inline void Stage::iterate_objects(const F &func) template inline T &Stage::add_system(Args &&... args) { - // Ensure that a reflected class exists for scheduling - reflector.get_or_create_class(); - - auto &sys = systems.emplace_back(std::make_unique(*this, std::forward(args)...)); - scheduler.add_system(*sys); + auto &sys = static_cast(*systems.emplace_back(std::make_unique(*this, std::forward(args)...))); + reflector.get_or_create_class().template set_polymorphic_base(sys); + scheduler.add_system(sys); pending_reschedule = true; - return static_cast(*sys); + return sys; } template diff --git a/source/game/system.h b/source/game/system.h index 4d39e30..2f0f8ba 100644 --- a/source/game/system.h +++ b/source/game/system.h @@ -14,6 +14,8 @@ namespace Msp::Game { class MSPGAME_API System { public: + using PolymorphicBase = System; + enum DependencyFlags { NO_DEPENDENCY = 0, -- 2.45.2