From 8abe6c39fa97234526167b54e434860e89d33a66 Mon Sep 17 00:00:00 2001 From: Joseph Walton-Rivers <joseph@walton-rivers.uk> Date: Sun, 4 Sep 2022 00:44:23 +0100 Subject: [PATCH] define level rules in struct --- demo/demo/grid.cpp | 26 +++++++++++++------------- demo/include/grid.hpp | 8 +++++--- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/demo/demo/grid.cpp b/demo/demo/grid.cpp index 6d95d62..00368b8 100644 --- a/demo/demo/grid.cpp +++ b/demo/demo/grid.cpp @@ -73,7 +73,7 @@ namespace demo { } } - static fggl::entity::EntityID build_test_env(DemoGrid* area) { + static fggl::entity::EntityID build_test_env(DemoGrid* area, LevelRules& rules) { area->clear(); build_room(area, {5, 5}, {4,4}); build_room(area, {11, 5}, {1,1}); @@ -84,7 +84,10 @@ namespace demo { // set goal area->setFloorAt(17, 5, 2); - build_room(area, {25, 5}, {3,3}); + // level rules + rules.startingPower = 20; + rules.startingPos = {5, 5}; + rules.startingDirection = 1; // player fggl::entity::EntityID player = fggl::entity::INVALID; @@ -93,9 +96,6 @@ namespace demo { player = manager.create(); auto& cellPos = manager.add<CellPos>(player); auto& robotState = manager.add<RobotState>(player); - cellPos.pos = {5,5}; - cellPos.direction = 1; - robotState.power = 32; } return player; @@ -140,6 +140,7 @@ namespace demo { btn->label("go"); btn->addCallback([=](){ if ( !this->m_program.playing ) { + resetPuzzle(); this->m_program.m_currInstruction = 0; this->m_program.playing = true; } @@ -162,7 +163,7 @@ namespace demo { // create the grid world m_grid = std::make_unique<DemoGrid>(m_tiles); - m_player = build_test_env(m_grid.get()); + m_player = build_test_env(m_grid.get(), m_levelRules); resetPuzzle(); } @@ -171,7 +172,6 @@ namespace demo { m_grid = nullptr; } - constexpr float DRAW_SIZE = 64.0F; constexpr float DRAW_HALF = DRAW_SIZE / 2.0F; constexpr float WALL_HALF = 2.5F; @@ -292,17 +292,17 @@ namespace demo { } void GridScene::resetPuzzle() { - auto& robotPos = m_grid->entities().get<CellPos>(m_player); - auto& robotState = m_grid->entities().get<RobotState>(m_player); - // reset instruction panel m_program.playing = false; m_program.m_currInstruction = 0; // reset robot state - robotPos.pos = {5, 5}; - robotPos.direction = 1; - robotState.power = 32; + auto& robotPos = m_grid->entities().get<CellPos>(m_player); + auto& robotState = m_grid->entities().get<RobotState>(m_player); + + robotPos.pos = m_levelRules.startingPos; + robotPos.direction = m_levelRules.startingDirection; + robotState.power = m_levelRules.startingPower; } void GridScene::checkVictory() { diff --git a/demo/include/grid.hpp b/demo/include/grid.hpp index cdea3a7..be9561a 100644 --- a/demo/include/grid.hpp +++ b/demo/include/grid.hpp @@ -32,8 +32,10 @@ namespace demo { constexpr int GRID_SIZE = 255; using DemoGrid = fggl::entity::grid::Area2D<GRID_SIZE, GRID_SIZE>; - struct Sprite { - + struct LevelRules { + fggl::math::vec2i startingPos; + uint32_t startingDirection; + uint32_t startingPower; }; struct CellPos { @@ -52,7 +54,6 @@ namespace demo { struct RobotState { uint32_t power = 64; - }; class GridScene : public fggl::scenes::GameBase { @@ -68,6 +69,7 @@ namespace demo { fggl::animation::FrameAnimator m_animator; std::unique_ptr<DemoGrid> m_grid; fggl::gui::Container m_canvas; + LevelRules m_levelRules; fggl::entity::EntityID m_player = fggl::entity::INVALID; Program m_program; -- GitLab