Skip to content
Snippets Groups Projects
Commit 8abe6c39 authored by Joseph Walton-Rivers's avatar Joseph Walton-Rivers
Browse files

define level rules in struct

parent d2237aa6
No related branches found
No related tags found
No related merge requests found
...@@ -73,7 +73,7 @@ namespace demo { ...@@ -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(); area->clear();
build_room(area, {5, 5}, {4,4}); build_room(area, {5, 5}, {4,4});
build_room(area, {11, 5}, {1,1}); build_room(area, {11, 5}, {1,1});
...@@ -84,7 +84,10 @@ namespace demo { ...@@ -84,7 +84,10 @@ namespace demo {
// set goal // set goal
area->setFloorAt(17, 5, 2); 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 // player
fggl::entity::EntityID player = fggl::entity::INVALID; fggl::entity::EntityID player = fggl::entity::INVALID;
...@@ -93,9 +96,6 @@ namespace demo { ...@@ -93,9 +96,6 @@ namespace demo {
player = manager.create(); player = manager.create();
auto& cellPos = manager.add<CellPos>(player); auto& cellPos = manager.add<CellPos>(player);
auto& robotState = manager.add<RobotState>(player); auto& robotState = manager.add<RobotState>(player);
cellPos.pos = {5,5};
cellPos.direction = 1;
robotState.power = 32;
} }
return player; return player;
...@@ -140,6 +140,7 @@ namespace demo { ...@@ -140,6 +140,7 @@ namespace demo {
btn->label("go"); btn->label("go");
btn->addCallback([=](){ btn->addCallback([=](){
if ( !this->m_program.playing ) { if ( !this->m_program.playing ) {
resetPuzzle();
this->m_program.m_currInstruction = 0; this->m_program.m_currInstruction = 0;
this->m_program.playing = true; this->m_program.playing = true;
} }
...@@ -162,7 +163,7 @@ namespace demo { ...@@ -162,7 +163,7 @@ namespace demo {
// create the grid world // create the grid world
m_grid = std::make_unique<DemoGrid>(m_tiles); 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(); resetPuzzle();
} }
...@@ -171,7 +172,6 @@ namespace demo { ...@@ -171,7 +172,6 @@ namespace demo {
m_grid = nullptr; m_grid = nullptr;
} }
constexpr float DRAW_SIZE = 64.0F; constexpr float DRAW_SIZE = 64.0F;
constexpr float DRAW_HALF = DRAW_SIZE / 2.0F; constexpr float DRAW_HALF = DRAW_SIZE / 2.0F;
constexpr float WALL_HALF = 2.5F; constexpr float WALL_HALF = 2.5F;
...@@ -292,17 +292,17 @@ namespace demo { ...@@ -292,17 +292,17 @@ namespace demo {
} }
void GridScene::resetPuzzle() { void GridScene::resetPuzzle() {
auto& robotPos = m_grid->entities().get<CellPos>(m_player);
auto& robotState = m_grid->entities().get<RobotState>(m_player);
// reset instruction panel // reset instruction panel
m_program.playing = false; m_program.playing = false;
m_program.m_currInstruction = 0; m_program.m_currInstruction = 0;
// reset robot state // reset robot state
robotPos.pos = {5, 5}; auto& robotPos = m_grid->entities().get<CellPos>(m_player);
robotPos.direction = 1; auto& robotState = m_grid->entities().get<RobotState>(m_player);
robotState.power = 32;
robotPos.pos = m_levelRules.startingPos;
robotPos.direction = m_levelRules.startingDirection;
robotState.power = m_levelRules.startingPower;
} }
void GridScene::checkVictory() { void GridScene::checkVictory() {
......
...@@ -32,8 +32,10 @@ namespace demo { ...@@ -32,8 +32,10 @@ namespace demo {
constexpr int GRID_SIZE = 255; constexpr int GRID_SIZE = 255;
using DemoGrid = fggl::entity::grid::Area2D<GRID_SIZE, GRID_SIZE>; 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 { struct CellPos {
...@@ -52,7 +54,6 @@ namespace demo { ...@@ -52,7 +54,6 @@ namespace demo {
struct RobotState { struct RobotState {
uint32_t power = 64; uint32_t power = 64;
}; };
class GridScene : public fggl::scenes::GameBase { class GridScene : public fggl::scenes::GameBase {
...@@ -68,6 +69,7 @@ namespace demo { ...@@ -68,6 +69,7 @@ namespace demo {
fggl::animation::FrameAnimator m_animator; fggl::animation::FrameAnimator m_animator;
std::unique_ptr<DemoGrid> m_grid; std::unique_ptr<DemoGrid> m_grid;
fggl::gui::Container m_canvas; fggl::gui::Container m_canvas;
LevelRules m_levelRules;
fggl::entity::EntityID m_player = fggl::entity::INVALID; fggl::entity::EntityID m_player = fggl::entity::INVALID;
Program m_program; Program m_program;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment