diff --git a/includes/context.hpp b/includes/context.hpp index 3075bb2..c03587c 100644 --- a/includes/context.hpp +++ b/includes/context.hpp @@ -2,7 +2,7 @@ * File name: context.hpp * Author: lejulien * Date created: 01-01-1970 00:59:59 -// Date modified: 10-01-2026 22:24:41 +// Date modified: 12-01-2026 20:31:50 * ------ */ @@ -13,11 +13,13 @@ #include class World; +class Rules; namespace gol { typedef struct ctx { std::shared_ptr world = nullptr; + std::shared_ptr rules = nullptr; nlohmann::json config_json; } ctx; diff --git a/src/control_menu.cpp b/src/control_menu.cpp index dfb3fc5..f9aa76b 100644 --- a/src/control_menu.cpp +++ b/src/control_menu.cpp @@ -2,7 +2,7 @@ * File name: control_menu.cpp * Author: lejulien * Date created: 10-01-2026 22:12:44 -// Date modified: 10-01-2026 22:43:36 +// Date modified: 12-01-2026 20:36:39 * ------ */ @@ -12,6 +12,7 @@ #include #include +#include namespace gol { @@ -59,6 +60,15 @@ void ControlMenu::update() { } else if (edit_ctrl_) { menu_state_ = MenuState::EDIT; } + if (step_ctrl_) { + context_.world->saveCompressed(); + context_.rules->update(); + step_ctrl_ = false; + } + if (step_back_ctrl_) { + context_.world->stepBack(); + step_back_ctrl_ = false; + } } void ControlMenu::display() { diff --git a/src/main.cpp b/src/main.cpp index cbbaa43..cb95fde 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,7 +2,7 @@ * File name: main.cpp * Author: lejulien * Date created: 10-01-2026 21:59:32 -// Date modified: 10-01-2026 22:55:11 +// Date modified: 12-01-2026 20:34:37 * ------ */ @@ -101,7 +101,7 @@ int main(int ac, char **av) { // Initialize objects context.world = std::make_shared(context); - Rules rules = Rules(); + context.rules = std::make_shared(); Render render(context.config_json["cell_size"]); // Imgui control menu @@ -122,7 +122,7 @@ int main(int ac, char **av) { std::string sel_txt_input_hint("patern name"); // Setups - rules.setup(&(*context.world)); + context.rules->setup(&(*context.world)); // Diplay generations while (!WindowShouldClose()) { // Frames shinenigans @@ -171,15 +171,6 @@ int main(int ac, char **av) { if (!sel_ctrl) { patern_name[0] = '\0'; } - if (control_menu.step_ctrl_) { - context.world->saveCompressed(); - rules.update(); - control_menu.step_ctrl_ = false; - } - if (control_menu.step_back_ctrl_) { - context.world->stepBack(); - control_menu.step_back_ctrl_ = false; - } if (control_menu.apply_ctrl_) { bool resize_needed = false; @@ -198,7 +189,7 @@ int main(int ac, char **av) { context.world->resize(context.config_json["screen_width"].get() / control_menu.cell_size_ctrl_, context.config_json["screen_height"].get() / control_menu.cell_size_ctrl_); render.updateCellSize(control_menu.cell_size_ctrl_); - rules.newWorld(&(*context.world)); + context.rules->newWorld(&(*context.world)); context.config_json["cell_size"] = control_menu.cell_size_ctrl_; } if (control_menu.dark_theme_ctrl_ != context.config_json["dark_theme"]) { @@ -218,7 +209,7 @@ int main(int ac, char **av) { deltaTimeAccumulator -= timePerUpdate; if (control_menu.menu_state_ == MenuState::PLAY) { context.world->saveCompressed(); - rules.update(); + context.rules->update(); } } BeginDrawing();