Incorporate the systems registry to make it easier to add/remove systems.

This commit is contained in:
Zed A. Shaw 2026-05-25 12:00:25 -04:00
parent 54d0a41c52
commit 3d8572117c
5 changed files with 110 additions and 13 deletions

View file

@ -27,6 +27,8 @@ namespace gui {
$window.setVerticalSyncEnabled(VSYNC);
if(FRAME_LIMIT) $window.setFramerateLimit(FRAME_LIMIT);
$window.setPosition({0,0});
// BUG: I don't like this here
System::init($systems);
}
void FSM::event(Event ev, std::any data) {
@ -67,7 +69,7 @@ namespace gui {
void FSM::MOVING(Event ) {
// this should be an optional that returns a point
if(auto move_to = $main_ui.play_move()) {
System::move_player(*move_to);
$systems.runMoving(*move_to);
run_systems();
$main_ui.dirty();
state(State::IDLE);
@ -79,7 +81,7 @@ namespace gui {
switch(ev) {
case TICK: {
dbc::log("!!!!!! FIX System::combat(0) doesn't use any weapons, only first");
System::combat(0);
$systems.runCombat(0);
run_systems();
state(State::IN_COMBAT);
} break;
@ -88,7 +90,7 @@ namespace gui {
break;
case ATTACK: {
int attack_id = std::any_cast<int>(data);
System::combat(attack_id);
$systems.runCombat(attack_id);
run_systems();
} break;
default:
@ -193,7 +195,7 @@ namespace gui {
auto gui_id = std::any_cast<guecs::Entity>(data);
auto& slot_name = $status_ui.$gui.name_for(gui_id);
System::use_item(slot_name);
$systems.runUseItem(slot_name);
$status_ui.update();
} break;
case MOUSE_CLICK:
@ -203,7 +205,7 @@ namespace gui {
mouse_action({1 << guecs::ModBit::hover});
} break;
case AIM_CLICK:
System::pickup();
$systems.runPickup();
break;
default:
break; // ignore everything else
@ -418,7 +420,7 @@ namespace gui {
$boss_scene->render($window);
} else {
// this clears any attack animations, like fire
System::clear_attack();
$systems.runRender();
// BUG: this is the render for this class, and where I add an update
draw_gui();
}
@ -427,13 +429,7 @@ namespace gui {
}
void FSM::run_systems() {
System::generate_paths();
System::enemy_ai_initialize();
System::enemy_pathing();
System::motion();
System::collision();
System::lighting();
System::death();
$systems.runUpdate();
}
bool FSM::active() {