diff options
Diffstat (limited to 'src/games/minesweeper/Minesweeper.cpp')
| -rw-r--r-- | src/games/minesweeper/Minesweeper.cpp | 71 | 
1 files changed, 46 insertions, 25 deletions
diff --git a/src/games/minesweeper/Minesweeper.cpp b/src/games/minesweeper/Minesweeper.cpp index 60502c6..6dc77a4 100644 --- a/src/games/minesweeper/Minesweeper.cpp +++ b/src/games/minesweeper/Minesweeper.cpp @@ -85,7 +85,7 @@ void Minesweeper::InitAdjacentMineCounters() {  }  bool Minesweeper::Update(std::vector<SDL_Event> &events, RenderGroup &render_group) { -    V3F32 clear_color = {0.3f, 0.2f, 0.3f}; +    Color clear_color = {0.3f, 0.2f, 0.3f};      render_group.SetCameraSize(4.0f, 3.0f);      render_group.Clear(clear_color); @@ -266,10 +266,10 @@ void Minesweeper::DrawGameOverMenu(RenderGroup &render_group) {  }  void Minesweeper::DrawBoard(RenderGroup &render_group) { -    V3F32 covered_cell_color = V3F32(0.4f, 0.4f, 0.4f); -    V3F32 uncovered_cell_color = V3F32(0.2f, 0.2f, 0.2f); -    V3F32 flag_color = {0.6f, 0.3f, 03.f}; -    V3F32 mine_color = {0.8f, 0.2f, 0.2f}; +    Color covered_cell_color = {0.4f, 0.4f, 0.4f}; +    Color uncovered_cell_color = {0.2f, 0.2f, 0.2f}; +    Color flag_color = {0.6f, 0.3f, 03.f}; +    Color mine_color = {0.8f, 0.2f, 0.2f};      V2F32 flag_draw_size = {m_CellInnerViewSize.x * 0.5f, m_CellInnerViewSize.y * 0.5f};      V2F32 flag_draw_offset = { @@ -278,42 +278,63 @@ void Minesweeper::DrawBoard(RenderGroup &render_group) {      }; - -    // Todo: avoid if-statement by having them in separate contiguous locations? -      for (int32_t y = 0; y < m_MapHeight; y++) {          for (int32_t x = 0; x < m_MapWidth; x++) { -            V3F32 world_pos = { +            V2F32 world_pos = {                  m_MapViewPos.x + (float)x * m_CellOuterViewSize.x,                  m_MapViewPos.y + (float)y * m_CellOuterViewSize.y, -                0.0f              };              bool is_covered = IsCovered(x, y);              bool is_flagged = IsFlagged(x, y);              bool is_mine = IsMine(x, y);              if (is_covered) { -                render_group.PushRectangle(world_pos, m_CellInnerViewSize, covered_cell_color); -            } -            if (is_covered && is_flagged) { -                assert(IsCovered(x ,y)); -                V3F32 flag_world_pos = { -                    world_pos.x + flag_draw_offset.x, -                    world_pos.y + flag_draw_offset.y, -                    1.0f +                RectF32 cell_world_rect = { +                    world_pos.x, world_pos.y, +                    world_pos.x + m_CellInnerViewSize.x, world_pos.y + m_CellInnerViewSize.y                  }; -                render_group.PushRectangle(flag_world_pos, flag_draw_size, flag_color); -            } -            if (!is_covered && !is_mine) { -                render_group.PushRectangle(world_pos, m_CellInnerViewSize, uncovered_cell_color); +                render_group.PushRectangle(cell_world_rect, 0.0f, covered_cell_color); + + +                if (is_flagged) { +                    V3F32 flag_world_pos = { +                        world_pos.x + flag_draw_offset.x, +                        world_pos.y + flag_draw_offset.y, +                        1.0f +                    }; +                    RectF32 flag_world_rect = { +                        flag_world_pos.x, +                        flag_world_pos.y, +                        flag_world_pos.x + m_CellInnerViewSize.x, +                        flag_world_pos.y + m_CellInnerViewSize.y, +                    }; +                    render_group.PushRectangle(flag_world_rect, flag_world_pos.z, flag_color); +                }              } -            if (!is_covered && is_mine) { +            else {                  V3F32 mine_world_pos = {                      world_pos.x,                      world_pos.y, -                    2.0f +                    1.0f                  }; -                render_group.PushRectangle(mine_world_pos, m_CellInnerViewSize, mine_color); +                if (is_mine) { +                    RectF32 mine_world_rect = { +                        mine_world_pos.x, +                        mine_world_pos.y, +                        mine_world_pos.x + m_CellInnerViewSize.x, +                        mine_world_pos.y + m_CellInnerViewSize.y, +                    }; +                    render_group.PushRectangle(mine_world_rect, mine_world_pos.z, mine_color); +                } +                else { +                    RectF32 mine_world_rect = { +                        mine_world_pos.x, +                        mine_world_pos.y, +                        mine_world_pos.x + m_CellInnerViewSize.x, +                        mine_world_pos.y + m_CellInnerViewSize.y, +                    }; +                    render_group.PushRectangle(mine_world_rect, mine_world_pos.z, uncovered_cell_color); +                }              }          }      }  | 
