From 05d4b3a3a95f244240ee380cfc191b08784d6a18 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Tue, 5 Nov 2024 23:49:56 +0100 Subject: [PATCH 1/2] fix: fix mess with i8 and u8 grid coordinates the minos and the grids coordinates are unsigned, but single tetrions can have a negative position --- settings.json | 2 +- src/game/graphic_helpers.cpp | 2 +- src/game/graphic_helpers.hpp | 2 +- src/game/grid.cpp | 8 +- src/game/grid.hpp | 8 +- src/game/simulated_tetrion.cpp | 14 +- src/game/simulated_tetrion.hpp | 5 +- src/game/tetrion.cpp | 2 +- src/game/tetrion.hpp | 2 - src/game/tetromino.cpp | 14 +- src/game/tetromino.hpp | 16 +- src/libs/core/game/grid_properties.hpp | 27 +-- src/libs/core/game/mino.cpp | 4 +- src/libs/core/game/mino.hpp | 11 +- src/libs/core/game/mino_stack.cpp | 4 +- src/libs/core/game/mino_stack.hpp | 5 +- .../recordings/utility/tetrion_snapshot.cpp | 2 +- .../recordings/utility/tetrion_snapshot.hpp | 2 +- src/scenes/loading_screen/loading_screen.cpp | 20 +- src/scenes/loading_screen/loading_screen.hpp | 2 +- src/scenes/logo/logo.cpp | 188 +++++++++--------- 21 files changed, 170 insertions(+), 170 deletions(-) diff --git a/settings.json b/settings.json index 5ab6e5ba..2d1fa836 100644 --- a/settings.json +++ b/settings.json @@ -76,7 +76,7 @@ } ] }, - "volume": 0.0, + "volume": 0.2, "discord": false, "api_url": "https://oopetris.totto.lt/api/" } diff --git a/src/game/graphic_helpers.cpp b/src/game/graphic_helpers.cpp index 5630713d..afe63269 100644 --- a/src/game/graphic_helpers.cpp +++ b/src/game/graphic_helpers.cpp @@ -35,7 +35,7 @@ void helper::graphics::render_mino( const double original_scale, const Mino::ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const Mino::GridPoint& offset + const grid::GridUPoint& offset ) { const auto alpha = get_transparency_value(transparency); const auto alpha_factor = static_cast(alpha) / 255.0; diff --git a/src/game/graphic_helpers.hpp b/src/game/graphic_helpers.hpp index c0d22296..4d46a10b 100644 --- a/src/game/graphic_helpers.hpp +++ b/src/game/graphic_helpers.hpp @@ -28,7 +28,7 @@ namespace helper::graphics { double original_scale, const Mino::ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const Mino::GridPoint& offset = Mino::GridPoint::zero() + const grid::GridUPoint& offset = grid::GridUPoint::zero() ); diff --git a/src/game/grid.cpp b/src/game/grid.cpp index f9b443d7..4e9f44be 100644 --- a/src/game/grid.cpp +++ b/src/game/grid.cpp @@ -31,7 +31,7 @@ Grid::Grid(const ui::Layout& layout, bool is_top_level) return static_cast(m_tile_size) / static_cast(grid::original_tile_size); } -[[nodiscard]] shapes::UPoint Grid::to_screen_coords(GridPoint grid_coords) const { +[[nodiscard]] shapes::UPoint Grid::to_screen_coords(grid::GridUPoint grid_coords) const { return m_fill_rect.top_left + (grid_coords.cast() * m_tile_size); } @@ -51,7 +51,7 @@ void Grid::draw_preview_background(const ServiceProvider& service_provider) cons service_provider, GridRect{ grid::preview_background_position, - grid::preview_background_position + grid::preview_extends - GridPoint{ 1, 1 }, + grid::preview_background_position + grid::preview_extends - grid::GridUPoint{ 1, 1 }, } ); } @@ -61,7 +61,7 @@ void Grid::draw_hold_background(const ServiceProvider& service_provider) const { service_provider, GridRect{ grid::hold_background_position, - grid::hold_background_position + grid::hold_background_extends - GridPoint{ 1, 1 }, + grid::hold_background_position + grid::hold_background_extends - grid::GridUPoint{ 1, 1 }, } ); } @@ -80,7 +80,7 @@ void Grid::draw_background(const ServiceProvider& service_provider, GridRect gri const auto top_left = m_fill_rect.top_left + (grid_rect.top_left.cast() * m_tile_size); - const auto bottom_right = top_left + (GridPoint(grid_rect.width(), grid_rect.height()).cast() * m_tile_size); + const auto bottom_right = top_left + (grid::GridUPoint(grid_rect.width(), grid_rect.height()).cast() * m_tile_size); service_provider.renderer().draw_rect_filled(shapes::URect{ top_left, bottom_right }, background_color); diff --git a/src/game/grid.hpp b/src/game/grid.hpp index bf6c35dd..159c210a 100644 --- a/src/game/grid.hpp +++ b/src/game/grid.hpp @@ -11,15 +11,13 @@ struct Grid final : public ui::Widget { public: - using GridType = grid::GridType; - using GridPoint = grid::GridPoint; - using GridRect = shapes::AbstractRect; - static constexpr Color background_color{ 12, 12, 12 }; static constexpr Color border_color{ 42, 42, 42 }; static constexpr Color grid_color{ 31, 31, 31 }; private: + using GridRect = shapes::AbstractRect; + shapes::URect m_fill_rect; u32 m_tile_size; @@ -30,7 +28,7 @@ struct Grid final : public ui::Widget { OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] double scale_to_original() const; - OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] shapes::UPoint to_screen_coords(GridPoint grid_coords) const; + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] shapes::UPoint to_screen_coords(grid::GridUPoint grid_coords) const; OOPETRIS_GRAPHICS_EXPORTED void render(const ServiceProvider& service_provider) const override; diff --git a/src/game/simulated_tetrion.cpp b/src/game/simulated_tetrion.cpp index 1fbc7e72..7734c065 100644 --- a/src/game/simulated_tetrion.cpp +++ b/src/game/simulated_tetrion.cpp @@ -132,7 +132,7 @@ void SimulatedTetrion::spawn_next_tetromino( const helper::TetrominoType type, const SimulationStep simulation_step_index ) { - constexpr GridPoint spawn_position{ 3, 0 }; + constexpr grid::GridUPoint spawn_position{ 3, 0 }; m_active_tetromino = Tetromino{ spawn_position, type }; refresh_previews(); if (not is_active_tetromino_position_valid()) { @@ -146,7 +146,7 @@ void SimulatedTetrion::spawn_next_tetromino( all_valid = true; for (auto& mino : current_pieces) { if (mino.position().y != 0) { - mino.position() = mino.position() - GridPoint{ 0, 1 }; + mino.position() = mino.position() - grid::GridUPoint{ 0, 1 }; if (not is_valid_mino_position(mino.position())) { all_valid = false; } @@ -159,7 +159,7 @@ void SimulatedTetrion::spawn_next_tetromino( for (const Mino& mino : m_active_tetromino->minos()) { auto position = mino.position(); if (mino.position().y >= move_up && move_up != 0) { - position -= GridPoint{ 0, move_up }; + position -= grid::GridUPoint{ 0, move_up }; m_mino_stack.set(position, mino.type()); } } @@ -292,7 +292,7 @@ void SimulatedTetrion::clear_fully_occupied_lines() { for (u8 row = 0; row < grid::height_in_tiles; ++row) { bool fully_occupied = true; for (u8 column = 0; column < grid::width_in_tiles; ++column) { - if (m_mino_stack.is_empty(GridPoint{ column, row })) { + if (m_mino_stack.is_empty(grid::GridUPoint{ column, row })) { fully_occupied = false; break; } @@ -355,16 +355,16 @@ bool SimulatedTetrion::is_active_tetromino_position_valid() const { return is_tetromino_position_valid(m_active_tetromino.value()); } -bool SimulatedTetrion::is_valid_mino_position(GridPoint position) const { +bool SimulatedTetrion::is_valid_mino_position(grid::GridUPoint position) const { return position.x < grid::width_in_tiles and position.y < grid::height_in_tiles and m_mino_stack.is_empty(position); } -bool SimulatedTetrion::mino_can_move_down(GridPoint position) const { +bool SimulatedTetrion::mino_can_move_down(grid::GridUPoint position) const { if (position.y == (grid::height_in_tiles - 1)) { return false; } - return is_valid_mino_position(position + GridPoint{ 0, 1 }); + return is_valid_mino_position(position + grid::GridUPoint{ 0, 1 }); } diff --git a/src/game/simulated_tetrion.hpp b/src/game/simulated_tetrion.hpp index 209e85ac..e96a47ad 100644 --- a/src/game/simulated_tetrion.hpp +++ b/src/game/simulated_tetrion.hpp @@ -32,7 +32,6 @@ struct SimulatedTetrion { private: using WallKickPoint = shapes::AbstractPoint; using WallKickTable = std::array, 8>; - using GridPoint = Mino::GridPoint; static constexpr SimulationStep lock_delay = 30; static constexpr int num_lock_delays = 30; @@ -151,8 +150,8 @@ struct SimulatedTetrion { void clear_fully_occupied_lines(); void lock_active_tetromino(SimulationStep simulation_step_index); [[nodiscard]] bool is_active_tetromino_position_valid() const; - [[nodiscard]] bool mino_can_move_down(GridPoint position) const; - [[nodiscard]] bool is_valid_mino_position(GridPoint position) const; + [[nodiscard]] bool mino_can_move_down(grid::GridUPoint position) const; + [[nodiscard]] bool is_valid_mino_position(grid::GridUPoint position) const; void refresh_ghost_tetromino(); void refresh_previews(); diff --git a/src/game/tetrion.cpp b/src/game/tetrion.cpp index a6b7b263..a7ab3c80 100644 --- a/src/game/tetrion.cpp +++ b/src/game/tetrion.cpp @@ -72,7 +72,7 @@ void Tetrion::render(const ServiceProvider& service_provider) const { const auto* grid = get_grid(); const double original_scale = grid->scale_to_original(); - const ScreenCordsFunction to_screen_coords = [grid](const GridPoint& point) { + const ScreenCordsFunction to_screen_coords = [grid](const grid::GridUPoint& point) { return grid->to_screen_coords(point); }; const shapes::UPoint& tile_size = grid->tile_size(); diff --git a/src/game/tetrion.hpp b/src/game/tetrion.hpp index 36583674..589b18e6 100644 --- a/src/game/tetrion.hpp +++ b/src/game/tetrion.hpp @@ -21,11 +21,9 @@ namespace recorder { struct Tetrion final : public ui::Widget, SimulatedTetrion { private: using ScreenCordsFunction = Mino::ScreenCordsFunction; - using GridPoint = Mino::GridPoint; ui::TileLayout m_main_layout; - public: OOPETRIS_GRAPHICS_EXPORTED Tetrion( u8 tetrion_index, diff --git a/src/game/tetromino.cpp b/src/game/tetromino.cpp index ca978562..10ba85d2 100644 --- a/src/game/tetromino.cpp +++ b/src/game/tetromino.cpp @@ -16,7 +16,7 @@ void Tetromino::render( const double original_scale, const ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const GridPoint& offset + const grid::GridUPoint& offset ) const { for (const auto& mino : m_minos) { helper::graphics::render_mino( @@ -49,7 +49,7 @@ void Tetromino::move_right() { void Tetromino::move(const shapes::AbstractPoint offset) { // this looks weird but silently asserts, that the final point is not negative - m_position = (m_position.cast() + offset).cast(); + m_position = m_position.cast() + offset; refresh_minos(); } @@ -67,11 +67,11 @@ Tetromino::Pattern Tetromino::get_pattern(helper::TetrominoType type, Rotation r } -std::array Tetromino::create_minos(GridPoint position, Rotation rotation, helper::TetrominoType type) { +std::array Tetromino::create_minos(grid::GridPoint position, Rotation rotation, helper::TetrominoType type) { return std::array{ - Mino{ position + get_pattern(type, rotation).at(0), type }, - Mino{ position + get_pattern(type, rotation).at(1), type }, - Mino{ position + get_pattern(type, rotation).at(2), type }, - Mino{ position + get_pattern(type, rotation).at(3), type }, + Mino{ (position + get_pattern(type, rotation).at(0)).cast(), type }, + Mino{ (position + get_pattern(type, rotation).at(1)).cast(), type }, + Mino{ (position + get_pattern(type, rotation).at(2)).cast(), type }, + Mino{ (position + get_pattern(type, rotation).at(3)).cast(), type }, }; } diff --git a/src/game/tetromino.hpp b/src/game/tetromino.hpp index 6538af57..f72934ee 100644 --- a/src/game/tetromino.hpp +++ b/src/game/tetromino.hpp @@ -11,23 +11,27 @@ struct Tetromino final { private: - using GridPoint = Mino::GridPoint; using ScreenCordsFunction = Mino::ScreenCordsFunction; - GridPoint m_position; + grid::GridPoint m_position; Rotation m_rotation{ Rotation::North }; helper::TetrominoType m_type; std::array m_minos; public: - using TetrominoPoint = shapes::AbstractPoint; + using TetrominoPoint = shapes::AbstractPoint; using Pattern = std::array; - OOPETRIS_GRAPHICS_EXPORTED Tetromino(GridPoint position, helper::TetrominoType type) + OOPETRIS_GRAPHICS_EXPORTED Tetromino(grid::GridPoint position, helper::TetrominoType type) : m_position{ position }, m_type{ type }, m_minos{ create_minos(position, m_rotation, type) } { } + OOPETRIS_GRAPHICS_EXPORTED Tetromino(grid::GridUPoint position, helper::TetrominoType type) + : m_position{ position.cast() }, + m_type{ type }, + m_minos{ create_minos(m_position, m_rotation, type) } { } + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] helper::TetrominoType type() const; OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] Rotation rotation() const; @@ -37,7 +41,7 @@ struct Tetromino final { double original_scale, const ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const GridPoint& offset = GridPoint::zero() + const grid::GridUPoint& offset = grid::GridUPoint::zero() ) const; OOPETRIS_GRAPHICS_EXPORTED void rotate_right(); @@ -56,7 +60,7 @@ struct Tetromino final { static Pattern get_pattern(helper::TetrominoType type, Rotation rotation); - static std::array create_minos(GridPoint position, Rotation rotation, helper::TetrominoType type); + static std::array create_minos(grid::GridPoint position, Rotation rotation, helper::TetrominoType type); using TetrominoPatterns = std::array; // one pattern per rotation diff --git a/src/libs/core/game/grid_properties.hpp b/src/libs/core/game/grid_properties.hpp index 0d67c5a0..53c5e0d5 100644 --- a/src/libs/core/game/grid_properties.hpp +++ b/src/libs/core/game/grid_properties.hpp @@ -6,22 +6,25 @@ namespace grid { - using GridType = u8; + using GridType = i8; using GridPoint = shapes::AbstractPoint; - constexpr GridType original_tile_size = 26; + using GridUType = u8; + using GridUPoint = shapes::AbstractPoint; - constexpr GridType width_in_tiles = 10; - constexpr GridType height_in_tiles = 20; + constexpr GridUType original_tile_size = 26; - constexpr GridPoint preview_extends{ 4, (6 * 3) + 1 }; - constexpr GridPoint hold_background_position{ 0, 0 }; - constexpr GridPoint grid_position = hold_background_position + GridPoint{ preview_extends.x + 1, 0 }; - constexpr GridPoint preview_background_position{ grid_position.x + width_in_tiles + 1, 0 }; - constexpr GridPoint preview_tetromino_position = preview_background_position + GridPoint{ 0, 1 }; - constexpr GridPoint hold_tetromino_position = hold_background_position + GridPoint{ 0, 1 }; - constexpr GridPoint hold_background_extends = GridPoint{ 4, 4 }; - constexpr GridType preview_padding = 3; + constexpr GridUType width_in_tiles = 10; + constexpr GridUType height_in_tiles = 20; + + constexpr GridUPoint preview_extends{ 4, (6 * 3) + 1 }; + constexpr GridUPoint hold_background_position{ 0, 0 }; + constexpr GridUPoint grid_position = hold_background_position + GridUPoint{ preview_extends.x + 1, 0 }; + constexpr GridUPoint preview_background_position{ grid_position.x + width_in_tiles + 1, 0 }; + constexpr GridUPoint preview_tetromino_position = preview_background_position + GridUPoint{ 0, 1 }; + constexpr GridUPoint hold_tetromino_position = hold_background_position + GridUPoint{ 0, 1 }; + constexpr GridUPoint hold_background_extends = GridUPoint{ 4, 4 }; + constexpr GridUType preview_padding = 3; } // namespace grid diff --git a/src/libs/core/game/mino.cpp b/src/libs/core/game/mino.cpp index 0856d8d4..69b35d67 100644 --- a/src/libs/core/game/mino.cpp +++ b/src/libs/core/game/mino.cpp @@ -4,11 +4,11 @@ return m_type; } -[[nodiscard]] const Mino::GridPoint& Mino::position() const { +[[nodiscard]] const grid::GridUPoint& Mino::position() const { return m_position; } -[[nodiscard]] Mino::GridPoint& Mino::position() { +[[nodiscard]] grid::GridUPoint& Mino::position() { return m_position; } diff --git a/src/libs/core/game/mino.hpp b/src/libs/core/game/mino.hpp index 3171e0ed..0f5e5092 100644 --- a/src/libs/core/game/mino.hpp +++ b/src/libs/core/game/mino.hpp @@ -9,23 +9,22 @@ #include struct Mino final { public: - using GridPoint = grid::GridPoint; - using ScreenCordsFunction = std::function; + using ScreenCordsFunction = std::function; private: - GridPoint m_position; + grid::GridUPoint m_position; helper::TetrominoType m_type; public: - OOPETRIS_CORE_EXPORTED explicit constexpr Mino(GridPoint position, helper::TetrominoType type) + OOPETRIS_CORE_EXPORTED explicit constexpr Mino(grid::GridUPoint position, helper::TetrominoType type) : m_position{ position }, m_type{ type } { } OOPETRIS_CORE_EXPORTED [[nodiscard]] helper::TetrominoType type() const; - OOPETRIS_CORE_EXPORTED [[nodiscard]] const GridPoint& position() const; + OOPETRIS_CORE_EXPORTED [[nodiscard]] const grid::GridUPoint& position() const; - OOPETRIS_CORE_EXPORTED [[nodiscard]] GridPoint& position(); + OOPETRIS_CORE_EXPORTED [[nodiscard]] grid::GridUPoint& position(); OOPETRIS_CORE_EXPORTED [[nodiscard]] bool operator==(const Mino& other) const; diff --git a/src/libs/core/game/mino_stack.cpp b/src/libs/core/game/mino_stack.cpp index a4b655fe..36666b81 100644 --- a/src/libs/core/game/mino_stack.cpp +++ b/src/libs/core/game/mino_stack.cpp @@ -16,13 +16,13 @@ void MinoStack::clear_row_and_let_sink(u8 row) { } } -[[nodiscard]] bool MinoStack::is_empty(GridPoint coordinates) const { +[[nodiscard]] bool MinoStack::is_empty(grid::GridUPoint coordinates) const { return not std::ranges::any_of(m_minos, [&coordinates](const Mino& mino) { return mino.position() == coordinates; }); } -void MinoStack::set(GridPoint coordinates, helper::TetrominoType type) { +void MinoStack::set(grid::GridUPoint coordinates, helper::TetrominoType type) { const Mino to_insert = Mino{ coordinates, type }; for (Mino& current : m_minos) { if (current.position() == coordinates) { diff --git a/src/libs/core/game/mino_stack.hpp b/src/libs/core/game/mino_stack.hpp index 29856718..32da56d0 100644 --- a/src/libs/core/game/mino_stack.hpp +++ b/src/libs/core/game/mino_stack.hpp @@ -8,7 +8,6 @@ struct MinoStack final { private: - using GridPoint = Mino::GridPoint; using ScreenCordsFunction = Mino::ScreenCordsFunction; std::vector m_minos; @@ -16,9 +15,9 @@ struct MinoStack final { public: OOPETRIS_CORE_EXPORTED void clear_row_and_let_sink(u8 row); - OOPETRIS_CORE_EXPORTED [[nodiscard]] bool is_empty(GridPoint coordinates) const; + OOPETRIS_CORE_EXPORTED [[nodiscard]] bool is_empty(grid::GridUPoint coordinates) const; - OOPETRIS_CORE_EXPORTED void set(GridPoint coordinates, helper::TetrominoType type); + OOPETRIS_CORE_EXPORTED void set(grid::GridUPoint coordinates, helper::TetrominoType type); OOPETRIS_CORE_EXPORTED [[nodiscard]] u32 num_minos() const; diff --git a/src/libs/recordings/utility/tetrion_snapshot.cpp b/src/libs/recordings/utility/tetrion_snapshot.cpp index fca9d6bb..53e911fc 100644 --- a/src/libs/recordings/utility/tetrion_snapshot.cpp +++ b/src/libs/recordings/utility/tetrion_snapshot.cpp @@ -82,7 +82,7 @@ helper::expected TetrionSnapshot::from_istream(std }; } - mino_stack.set(shapes::AbstractPoint(x_coord.value(), y_coord.value()), maybe_type.value()); + mino_stack.set(grid::GridUPoint(x_coord.value(), y_coord.value()), maybe_type.value()); } diff --git a/src/libs/recordings/utility/tetrion_snapshot.hpp b/src/libs/recordings/utility/tetrion_snapshot.hpp index f833e764..abadda34 100644 --- a/src/libs/recordings/utility/tetrion_snapshot.hpp +++ b/src/libs/recordings/utility/tetrion_snapshot.hpp @@ -28,7 +28,7 @@ struct TetrionSnapshot final { public: using MinoCount = u64; - using Coordinate = u8; + using Coordinate = i8; OOPETRIS_RECORDINGS_EXPORTED TetrionSnapshot( u8 tetrion_index, diff --git a/src/scenes/loading_screen/loading_screen.cpp b/src/scenes/loading_screen/loading_screen.cpp index 4c16b646..e5afb734 100644 --- a/src/scenes/loading_screen/loading_screen.cpp +++ b/src/scenes/loading_screen/loading_screen.cpp @@ -15,14 +15,14 @@ scenes::LoadingScreen::LoadingScreen(ServiceProvider* service_provider) : m_segments{ - { Mino{ Mino::GridPoint{ 0, 0 }, helper::TetrominoType::J }, 1.0 }, - { Mino{ Mino::GridPoint{ 1, 0 }, helper::TetrominoType::L }, 1.0 }, - { Mino{ Mino::GridPoint{ 2, 0 }, helper::TetrominoType::I }, 1.0 }, - { Mino{ Mino::GridPoint{ 2, 1 }, helper::TetrominoType::O }, 1.0 }, - { Mino{ Mino::GridPoint{ 2, 2 }, helper::TetrominoType::S }, 1.0 }, - { Mino{ Mino::GridPoint{ 1, 2 }, helper::TetrominoType::T }, 1.0 }, - { Mino{ Mino::GridPoint{ 0, 2 }, helper::TetrominoType::I }, 1.0 }, - { Mino{ Mino::GridPoint{ 0, 1 }, helper::TetrominoType::Z }, 1.0 }, + { Mino{ grid::GridUPoint{ 0, 0 }, helper::TetrominoType::J }, 1.0 }, + { Mino{ grid::GridUPoint{ 1, 0 }, helper::TetrominoType::L }, 1.0 }, + { Mino{ grid::GridUPoint{ 2, 0 }, helper::TetrominoType::I }, 1.0 }, + { Mino{ grid::GridUPoint{ 2, 1 }, helper::TetrominoType::O }, 1.0 }, + { Mino{ grid::GridUPoint{ 2, 2 }, helper::TetrominoType::S }, 1.0 }, + { Mino{ grid::GridUPoint{ 1, 2 }, helper::TetrominoType::T }, 1.0 }, + { Mino{ grid::GridUPoint{ 0, 2 }, helper::TetrominoType::I }, 1.0 }, + { Mino{ grid::GridUPoint{ 0, 1 }, helper::TetrominoType::Z }, 1.0 }, },m_logo{logo::get_logo(service_provider)} { const auto [total_x_tiles, total_y_tiles] = utils::get_orientation() == utils::Orientation::Landscape @@ -107,7 +107,7 @@ void scenes::LoadingScreen::render(const ServiceProvider& service_provider) cons helper::graphics::render_mino( mino, service_provider, MinoTransparency::Solid, original_scale, - [this, tile_size](const Mino::GridPoint& point) -> auto { + [this, tile_size](const grid::GridUPoint& point) -> auto { return this->to_screen_coords(point, tile_size); }, { tile_size, tile_size } @@ -119,7 +119,7 @@ void scenes::LoadingScreen::render(const ServiceProvider& service_provider) cons } -[[nodiscard]] shapes::UPoint scenes::LoadingScreen::to_screen_coords(const Mino::GridPoint& point, u32 tile_size) +[[nodiscard]] shapes::UPoint scenes::LoadingScreen::to_screen_coords(const grid::GridUPoint& point, u32 tile_size) const { const auto start_edge = m_start_offset + point.cast() * m_tile_size; const auto inner_offset = m_tile_size - (tile_size / 2); diff --git a/src/scenes/loading_screen/loading_screen.hpp b/src/scenes/loading_screen/loading_screen.hpp index c1e7df79..6101f259 100644 --- a/src/scenes/loading_screen/loading_screen.hpp +++ b/src/scenes/loading_screen/loading_screen.hpp @@ -27,7 +27,7 @@ namespace scenes { OOPETRIS_GRAPHICS_EXPORTED void render(const ServiceProvider& service_provider) const; private: - [[nodiscard]] shapes::UPoint to_screen_coords(const Mino::GridPoint& point, u32 tile_size) const; + [[nodiscard]] shapes::UPoint to_screen_coords(const grid::GridUPoint& point, u32 tile_size) const; }; } // namespace scenes diff --git a/src/scenes/logo/logo.cpp b/src/scenes/logo/logo.cpp index 2a07c408..0350b174 100644 --- a/src/scenes/logo/logo.cpp +++ b/src/scenes/logo/logo.cpp @@ -10,109 +10,109 @@ [[nodiscard]] Texture logo::get_logo(const ServiceProvider* service_provider, double scale) { - constexpr const Mino::GridPoint offset_o2{ 5, 0 }; - constexpr const auto offset_p3 = offset_o2 + Mino::GridPoint{ 5, 0 }; - constexpr const auto offset_e4 = offset_p3 + Mino::GridPoint{ 4, 0 }; - constexpr const auto offset_t5 = offset_e4 + Mino::GridPoint{ 4, 0 }; - constexpr const auto offset_r6 = offset_t5 + Mino::GridPoint{ 6, 0 }; - constexpr const auto offset_i7 = offset_r6 + Mino::GridPoint{ 4, 0 }; - constexpr const auto offset_s8 = offset_i7 + Mino::GridPoint{ 2, 0 }; + constexpr const grid::GridUPoint offset_o2{ 5, 0 }; + constexpr const auto offset_p3 = offset_o2 + grid::GridUPoint{ 5, 0 }; + constexpr const auto offset_e4 = offset_p3 + grid::GridUPoint{ 4, 0 }; + constexpr const auto offset_t5 = offset_e4 + grid::GridUPoint{ 4, 0 }; + constexpr const auto offset_r6 = offset_t5 + grid::GridUPoint{ 6, 0 }; + constexpr const auto offset_i7 = offset_r6 + grid::GridUPoint{ 4, 0 }; + constexpr const auto offset_s8 = offset_i7 + grid::GridUPoint{ 2, 0 }; const std::vector minos{ // O - Mino{ Mino::GridPoint{ 0, 0 }, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 1, 0 }, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 2, 0 }, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 3, 0 }, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 3, 1 }, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 3, 2 }, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 3, 3 }, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 3, 4 }, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 2, 4 }, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 1, 4 }, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 0, 4 }, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 0, 3 }, helper::TetrominoType::S }, - Mino{ Mino::GridPoint{ 0, 2 }, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 0, 1 }, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 0, 0 }, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 1, 0 }, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 2, 0 }, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 3, 0 }, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 3, 1 }, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 3, 2 }, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 3, 3 }, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 3, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 2, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 1, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 0, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 0, 3 }, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 0, 2 }, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 0, 1 }, helper::TetrominoType::J }, // O - Mino{ Mino::GridPoint{ 0, 0 } + offset_o2, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 1, 0 } + offset_o2, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 2, 0 } + offset_o2, helper::TetrominoType::S }, - Mino{ Mino::GridPoint{ 3, 0 } + offset_o2, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 3, 1 } + offset_o2, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 3, 2 } + offset_o2, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 3, 3 } + offset_o2, helper::TetrominoType::S }, - Mino{ Mino::GridPoint{ 3, 4 } + offset_o2, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 2, 4 } + offset_o2, helper::TetrominoType::S }, - Mino{ Mino::GridPoint{ 1, 4 } + offset_o2, helper::TetrominoType::S }, - Mino{ Mino::GridPoint{ 0, 4 } + offset_o2, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 0, 3 } + offset_o2, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 0, 2 } + offset_o2, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 0, 1 } + offset_o2, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 0, 0 } + offset_o2, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 1, 0 } + offset_o2, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 2, 0 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 3, 0 } + offset_o2, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 3, 1 } + offset_o2, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 3, 2 } + offset_o2, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 3, 3 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 3, 4 } + offset_o2, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 2, 4 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 1, 4 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 0, 4 } + offset_o2, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 0, 3 } + offset_o2, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 0, 2 } + offset_o2, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 0, 1 } + offset_o2, helper::TetrominoType::O }, // P - Mino{ Mino::GridPoint{ 0, 0 } + offset_p3, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 1, 0 } + offset_p3, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 2, 0 } + offset_p3, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 2, 1 } + offset_p3, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 2, 2 } + offset_p3, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 1, 2 } + offset_p3, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 0, 2 } + offset_p3, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 0, 1 } + offset_p3, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 0, 3 } + offset_p3, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 0, 4 } + offset_p3, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 0, 0 } + offset_p3, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 1, 0 } + offset_p3, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 2, 0 } + offset_p3, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 2, 1 } + offset_p3, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 2, 2 } + offset_p3, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 1, 2 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 0, 2 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 0, 1 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 0, 3 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 0, 4 } + offset_p3, helper::TetrominoType::S }, // E - Mino{ Mino::GridPoint{ 0, 0 } + offset_e4, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 1, 0 } + offset_e4, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 2, 0 } + offset_e4, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 0, 1 } + offset_e4, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 0, 2 } + offset_e4, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 1, 2 } + offset_e4, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 2, 2 } + offset_e4, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 0, 3 } + offset_e4, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 0, 4 } + offset_e4, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 1, 4 } + offset_e4, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 2, 4 } + offset_e4, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 0, 0 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 1, 0 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 2, 0 } + offset_e4, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 0, 1 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 0, 2 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 1, 2 } + offset_e4, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 2, 2 } + offset_e4, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 0, 3 } + offset_e4, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 0, 4 } + offset_e4, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 1, 4 } + offset_e4, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 2, 4 } + offset_e4, helper::TetrominoType::S }, // T - Mino{ Mino::GridPoint{ 0, 0 } + offset_t5, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 1, 0 } + offset_t5, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 2, 0 } + offset_t5, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 3, 0 } + offset_t5, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 4, 0 } + offset_t5, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 2, 1 } + offset_t5, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 2, 2 } + offset_t5, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 2, 3 } + offset_t5, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 2, 4 } + offset_t5, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 0, 0 } + offset_t5, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 1, 0 } + offset_t5, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 2, 0 } + offset_t5, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 3, 0 } + offset_t5, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 4, 0 } + offset_t5, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 2, 1 } + offset_t5, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 2, 2 } + offset_t5, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 2, 3 } + offset_t5, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 2, 4 } + offset_t5, helper::TetrominoType::S }, // R - Mino{ Mino::GridPoint{ 0, 0 } + offset_r6, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 1, 0 } + offset_r6, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 2, 0 } + offset_r6, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 2, 1 } + offset_r6, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 2, 2 } + offset_r6, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 1, 2 } + offset_r6, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 0, 2 } + offset_r6, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 0, 1 } + offset_r6, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 0, 3 } + offset_r6, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 1, 3 } + offset_r6, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 0, 4 } + offset_r6, helper::TetrominoType::S }, - Mino{ Mino::GridPoint{ 2, 4 } + offset_r6, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 0, 0 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 1, 0 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 2, 0 } + offset_r6, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 2, 1 } + offset_r6, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 2, 2 } + offset_r6, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 1, 2 } + offset_r6, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 0, 2 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 0, 1 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 0, 3 } + offset_r6, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 1, 3 } + offset_r6, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 0, 4 } + offset_r6, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 2, 4 } + offset_r6, helper::TetrominoType::S }, // I - Mino{ Mino::GridPoint{ 0, 0 } + offset_i7, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 0, 1 } + offset_i7, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 0, 2 } + offset_i7, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 0, 3 } + offset_i7, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 0, 4 } + offset_i7, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 0, 0 } + offset_i7, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 0, 1 } + offset_i7, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 0, 2 } + offset_i7, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 0, 3 } + offset_i7, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 0, 4 } + offset_i7, helper::TetrominoType::S }, // S - Mino{ Mino::GridPoint{ 0, 0 } + offset_s8, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 1, 0 } + offset_s8, helper::TetrominoType::Z }, - Mino{ Mino::GridPoint{ 2, 0 } + offset_s8, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 2, 2 } + offset_s8, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 1, 2 } + offset_s8, helper::TetrominoType::L }, - Mino{ Mino::GridPoint{ 0, 2 } + offset_s8, helper::TetrominoType::J }, - Mino{ Mino::GridPoint{ 0, 1 } + offset_s8, helper::TetrominoType::I }, - Mino{ Mino::GridPoint{ 2, 3 } + offset_s8, helper::TetrominoType::T }, - Mino{ Mino::GridPoint{ 0, 4 } + offset_s8, helper::TetrominoType::S }, - Mino{ Mino::GridPoint{ 1, 4 } + offset_s8, helper::TetrominoType::O }, - Mino{ Mino::GridPoint{ 2, 4 } + offset_s8, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 0, 0 } + offset_s8, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 1, 0 } + offset_s8, helper::TetrominoType::Z }, + Mino{ grid::GridUPoint{ 2, 0 } + offset_s8, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 2, 2 } + offset_s8, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 1, 2 } + offset_s8, helper::TetrominoType::L }, + Mino{ grid::GridUPoint{ 0, 2 } + offset_s8, helper::TetrominoType::J }, + Mino{ grid::GridUPoint{ 0, 1 } + offset_s8, helper::TetrominoType::I }, + Mino{ grid::GridUPoint{ 2, 3 } + offset_s8, helper::TetrominoType::T }, + Mino{ grid::GridUPoint{ 0, 4 } + offset_s8, helper::TetrominoType::S }, + Mino{ grid::GridUPoint{ 1, 4 } + offset_s8, helper::TetrominoType::O }, + Mino{ grid::GridUPoint{ 2, 4 } + offset_s8, helper::TetrominoType::I }, }; const auto tile_size = static_cast(static_cast(grid::original_tile_size) * scale); @@ -134,7 +134,7 @@ for (const auto& mino : minos) { helper::graphics::render_mino( mino, *service_provider, MinoTransparency::Solid, original_scale, - [tile_size](const Mino::GridPoint& point) -> auto { return point.cast() * tile_size; }, + [tile_size](const grid::GridUPoint& point) -> auto { return point.cast() * tile_size; }, { tile_size, tile_size } ); } From cc15613426d65bd8ca7c12778acf977dec4263c0 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Wed, 6 Nov 2024 00:51:07 +0100 Subject: [PATCH 2/2] fix: handle everything regarding minos in i8, since that is way easier --- src/game/graphic_helpers.cpp | 2 +- src/game/graphic_helpers.hpp | 2 +- src/game/grid.cpp | 15 +- src/game/grid.hpp | 4 +- src/game/simulated_tetrion.cpp | 26 +-- src/game/simulated_tetrion.hpp | 4 +- src/game/tetrion.cpp | 2 +- src/game/tetromino.cpp | 10 +- src/game/tetromino.hpp | 7 +- src/libs/core/game/grid_properties.hpp | 25 ++- src/libs/core/game/mino.cpp | 4 +- src/libs/core/game/mino.hpp | 10 +- src/libs/core/game/mino_stack.cpp | 10 +- src/libs/core/game/mino_stack.hpp | 4 +- .../recordings/utility/tetrion_snapshot.cpp | 2 +- src/scenes/loading_screen/loading_screen.cpp | 20 +- src/scenes/loading_screen/loading_screen.hpp | 2 +- src/scenes/logo/logo.cpp | 188 +++++++++--------- 18 files changed, 167 insertions(+), 170 deletions(-) diff --git a/src/game/graphic_helpers.cpp b/src/game/graphic_helpers.cpp index afe63269..d86ac319 100644 --- a/src/game/graphic_helpers.cpp +++ b/src/game/graphic_helpers.cpp @@ -35,7 +35,7 @@ void helper::graphics::render_mino( const double original_scale, const Mino::ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const grid::GridUPoint& offset + const grid::GridPoint& offset ) { const auto alpha = get_transparency_value(transparency); const auto alpha_factor = static_cast(alpha) / 255.0; diff --git a/src/game/graphic_helpers.hpp b/src/game/graphic_helpers.hpp index 4d46a10b..3bc1367f 100644 --- a/src/game/graphic_helpers.hpp +++ b/src/game/graphic_helpers.hpp @@ -28,7 +28,7 @@ namespace helper::graphics { double original_scale, const Mino::ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const grid::GridUPoint& offset = grid::GridUPoint::zero() + const grid::GridPoint& offset = grid::GridPoint::zero() ); diff --git a/src/game/grid.cpp b/src/game/grid.cpp index 4e9f44be..d1365214 100644 --- a/src/game/grid.cpp +++ b/src/game/grid.cpp @@ -31,7 +31,7 @@ Grid::Grid(const ui::Layout& layout, bool is_top_level) return static_cast(m_tile_size) / static_cast(grid::original_tile_size); } -[[nodiscard]] shapes::UPoint Grid::to_screen_coords(grid::GridUPoint grid_coords) const { +[[nodiscard]] shapes::UPoint Grid::to_screen_coords(grid::GridPoint grid_coords) const { return m_fill_rect.top_left + (grid_coords.cast() * m_tile_size); } @@ -51,7 +51,7 @@ void Grid::draw_preview_background(const ServiceProvider& service_provider) cons service_provider, GridRect{ grid::preview_background_position, - grid::preview_background_position + grid::preview_extends - grid::GridUPoint{ 1, 1 }, + grid::preview_background_position + grid::preview_extends - grid::GridPoint{ 1, 1 }, } ); } @@ -61,7 +61,7 @@ void Grid::draw_hold_background(const ServiceProvider& service_provider) const { service_provider, GridRect{ grid::hold_background_position, - grid::hold_background_position + grid::hold_background_extends - grid::GridUPoint{ 1, 1 }, + grid::hold_background_position + grid::hold_background_extends - grid::GridPoint{ 1, 1 }, } ); } @@ -71,7 +71,7 @@ void Grid::draw_playing_field_background(const ServiceProvider& service_provider service_provider, GridRect{ grid::grid_position, - grid::grid_position + shapes::UPoint{ grid::width_in_tiles - 1, grid::height_in_tiles - 1 }, + grid::grid_position + shapes::IPoint{ grid::width_in_tiles - 1, grid::height_in_tiles - 1 }, } ); } @@ -80,18 +80,19 @@ void Grid::draw_background(const ServiceProvider& service_provider, GridRect gri const auto top_left = m_fill_rect.top_left + (grid_rect.top_left.cast() * m_tile_size); - const auto bottom_right = top_left + (grid::GridUPoint(grid_rect.width(), grid_rect.height()).cast() * m_tile_size); + const auto bottom_right = + top_left + (grid::GridPoint(grid_rect.width(), grid_rect.height()).cast() * m_tile_size); service_provider.renderer().draw_rect_filled(shapes::URect{ top_left, bottom_right }, background_color); - for (u32 column = 0; column <= grid_rect.width(); ++column) { + for (i32 column = 0; column <= grid_rect.width(); ++column) { const auto start = top_left + shapes::UPoint{ column * m_tile_size, 0 }; const auto end = shapes::UPoint{ start.x, start.y + (grid_rect.height() * m_tile_size) }; service_provider.renderer().draw_line(start, end, grid_color); service_provider.renderer().draw_line(start - shapes::UPoint{ 1, 0 }, end - shapes::UPoint{ 1, 0 }, grid_color); } - for (u32 row = 0; row <= grid_rect.height(); ++row) { + for (i32 row = 0; row <= grid_rect.height(); ++row) { const auto start = top_left + shapes::UPoint{ 0, row * m_tile_size }; const auto end = shapes::UPoint{ bottom_right.x, start.y }; service_provider.renderer().draw_line(start, end, grid_color); diff --git a/src/game/grid.hpp b/src/game/grid.hpp index 159c210a..447f61d1 100644 --- a/src/game/grid.hpp +++ b/src/game/grid.hpp @@ -16,7 +16,7 @@ struct Grid final : public ui::Widget { static constexpr Color grid_color{ 31, 31, 31 }; private: - using GridRect = shapes::AbstractRect; + using GridRect = shapes::AbstractRect; shapes::URect m_fill_rect; u32 m_tile_size; @@ -28,7 +28,7 @@ struct Grid final : public ui::Widget { OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] double scale_to_original() const; - OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] shapes::UPoint to_screen_coords(grid::GridUPoint grid_coords) const; + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] shapes::UPoint to_screen_coords(grid::GridPoint grid_coords) const; OOPETRIS_GRAPHICS_EXPORTED void render(const ServiceProvider& service_provider) const override; diff --git a/src/game/simulated_tetrion.cpp b/src/game/simulated_tetrion.cpp index 7734c065..8abc8943 100644 --- a/src/game/simulated_tetrion.cpp +++ b/src/game/simulated_tetrion.cpp @@ -132,7 +132,7 @@ void SimulatedTetrion::spawn_next_tetromino( const helper::TetrominoType type, const SimulationStep simulation_step_index ) { - constexpr grid::GridUPoint spawn_position{ 3, 0 }; + constexpr grid::GridPoint spawn_position{ 3, 0 }; m_active_tetromino = Tetromino{ spawn_position, type }; refresh_previews(); if (not is_active_tetromino_position_valid()) { @@ -141,12 +141,12 @@ void SimulatedTetrion::spawn_next_tetromino( auto current_pieces = m_active_tetromino.value().minos(); bool all_valid{ false }; - u8 move_up = 0; + i8 move_up = 0; while (not all_valid) { all_valid = true; for (auto& mino : current_pieces) { if (mino.position().y != 0) { - mino.position() = mino.position() - grid::GridUPoint{ 0, 1 }; + mino.position() = mino.position() - grid::GridPoint{ 0, 1 }; if (not is_valid_mino_position(mino.position())) { all_valid = false; } @@ -159,7 +159,7 @@ void SimulatedTetrion::spawn_next_tetromino( for (const Mino& mino : m_active_tetromino->minos()) { auto position = mino.position(); if (mino.position().y >= move_up && move_up != 0) { - position -= grid::GridUPoint{ 0, move_up }; + position -= grid::GridPoint{ 0, move_up }; m_mino_stack.set(position, mino.type()); } } @@ -289,10 +289,10 @@ void SimulatedTetrion::clear_fully_occupied_lines() { const u32 lines_cleared_before = m_lines_cleared; do { // NOLINT(cppcoreguidelines-avoid-do-while) cleared = false; - for (u8 row = 0; row < grid::height_in_tiles; ++row) { + for (i8 row = 0; row < grid::height_in_tiles; ++row) { bool fully_occupied = true; - for (u8 column = 0; column < grid::width_in_tiles; ++column) { - if (m_mino_stack.is_empty(grid::GridUPoint{ column, row })) { + for (i8 column = 0; column < grid::width_in_tiles; ++column) { + if (m_mino_stack.is_empty(grid::GridPoint{ column, row })) { fully_occupied = false; break; } @@ -355,16 +355,18 @@ bool SimulatedTetrion::is_active_tetromino_position_valid() const { return is_tetromino_position_valid(m_active_tetromino.value()); } -bool SimulatedTetrion::is_valid_mino_position(grid::GridUPoint position) const { - return position.x < grid::width_in_tiles and position.y < grid::height_in_tiles and m_mino_stack.is_empty(position); +bool SimulatedTetrion::is_valid_mino_position(grid::GridPoint position) const { + + return position.x >= 0 and position.x < grid::width_in_tiles and position.y >= 0 + and position.y < grid::height_in_tiles and m_mino_stack.is_empty(position); } -bool SimulatedTetrion::mino_can_move_down(grid::GridUPoint position) const { +bool SimulatedTetrion::mino_can_move_down(grid::GridPoint position) const { if (position.y == (grid::height_in_tiles - 1)) { return false; } - return is_valid_mino_position(position + grid::GridUPoint{ 0, 1 }); + return is_valid_mino_position(position + grid::GridPoint{ 0, 1 }); } @@ -384,7 +386,7 @@ void SimulatedTetrion::refresh_previews() { auto bag_index = usize{ 0 }; for (std::remove_cvref_t i = 0; i < num_preview_tetrominos; ++i) { m_preview_tetrominos.at(static_cast(i)) = Tetromino{ - grid::preview_tetromino_position + shapes::UPoint{ 0, static_cast(grid::preview_padding * i) }, + grid::preview_tetromino_position + shapes::IPoint{ 0, grid::preview_padding * i }, m_sequence_bags.at(bag_index)[sequence_index] }; ++sequence_index; diff --git a/src/game/simulated_tetrion.hpp b/src/game/simulated_tetrion.hpp index e96a47ad..f3cce571 100644 --- a/src/game/simulated_tetrion.hpp +++ b/src/game/simulated_tetrion.hpp @@ -150,8 +150,8 @@ struct SimulatedTetrion { void clear_fully_occupied_lines(); void lock_active_tetromino(SimulationStep simulation_step_index); [[nodiscard]] bool is_active_tetromino_position_valid() const; - [[nodiscard]] bool mino_can_move_down(grid::GridUPoint position) const; - [[nodiscard]] bool is_valid_mino_position(grid::GridUPoint position) const; + [[nodiscard]] bool mino_can_move_down(grid::GridPoint position) const; + [[nodiscard]] bool is_valid_mino_position(grid::GridPoint position) const; void refresh_ghost_tetromino(); void refresh_previews(); diff --git a/src/game/tetrion.cpp b/src/game/tetrion.cpp index a7ab3c80..9fce86f4 100644 --- a/src/game/tetrion.cpp +++ b/src/game/tetrion.cpp @@ -72,7 +72,7 @@ void Tetrion::render(const ServiceProvider& service_provider) const { const auto* grid = get_grid(); const double original_scale = grid->scale_to_original(); - const ScreenCordsFunction to_screen_coords = [grid](const grid::GridUPoint& point) { + const ScreenCordsFunction to_screen_coords = [grid](const grid::GridPoint& point) { return grid->to_screen_coords(point); }; const shapes::UPoint& tile_size = grid->tile_size(); diff --git a/src/game/tetromino.cpp b/src/game/tetromino.cpp index 10ba85d2..63317c4a 100644 --- a/src/game/tetromino.cpp +++ b/src/game/tetromino.cpp @@ -16,7 +16,7 @@ void Tetromino::render( const double original_scale, const ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const grid::GridUPoint& offset + const grid::GridPoint& offset ) const { for (const auto& mino : m_minos) { helper::graphics::render_mino( @@ -69,9 +69,9 @@ Tetromino::Pattern Tetromino::get_pattern(helper::TetrominoType type, Rotation r std::array Tetromino::create_minos(grid::GridPoint position, Rotation rotation, helper::TetrominoType type) { return std::array{ - Mino{ (position + get_pattern(type, rotation).at(0)).cast(), type }, - Mino{ (position + get_pattern(type, rotation).at(1)).cast(), type }, - Mino{ (position + get_pattern(type, rotation).at(2)).cast(), type }, - Mino{ (position + get_pattern(type, rotation).at(3)).cast(), type }, + Mino{ position + get_pattern(type, rotation).at(0), type }, + Mino{ position + get_pattern(type, rotation).at(1), type }, + Mino{ position + get_pattern(type, rotation).at(2), type }, + Mino{ position + get_pattern(type, rotation).at(3), type }, }; } diff --git a/src/game/tetromino.hpp b/src/game/tetromino.hpp index f72934ee..5c0cdb03 100644 --- a/src/game/tetromino.hpp +++ b/src/game/tetromino.hpp @@ -27,11 +27,6 @@ struct Tetromino final { m_type{ type }, m_minos{ create_minos(position, m_rotation, type) } { } - OOPETRIS_GRAPHICS_EXPORTED Tetromino(grid::GridUPoint position, helper::TetrominoType type) - : m_position{ position.cast() }, - m_type{ type }, - m_minos{ create_minos(m_position, m_rotation, type) } { } - OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] helper::TetrominoType type() const; OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] Rotation rotation() const; @@ -41,7 +36,7 @@ struct Tetromino final { double original_scale, const ScreenCordsFunction& to_screen_coords, const shapes::UPoint& tile_size, - const grid::GridUPoint& offset = grid::GridUPoint::zero() + const grid::GridPoint& offset = grid::GridPoint::zero() ) const; OOPETRIS_GRAPHICS_EXPORTED void rotate_right(); diff --git a/src/libs/core/game/grid_properties.hpp b/src/libs/core/game/grid_properties.hpp index 53c5e0d5..76a3d4df 100644 --- a/src/libs/core/game/grid_properties.hpp +++ b/src/libs/core/game/grid_properties.hpp @@ -4,27 +4,26 @@ #include "../helper/point.hpp" + namespace grid { using GridType = i8; using GridPoint = shapes::AbstractPoint; - using GridUType = u8; - using GridUPoint = shapes::AbstractPoint; - constexpr GridUType original_tile_size = 26; + constexpr GridType original_tile_size = 26; - constexpr GridUType width_in_tiles = 10; - constexpr GridUType height_in_tiles = 20; + constexpr GridType width_in_tiles = 10; + constexpr GridType height_in_tiles = 20; - constexpr GridUPoint preview_extends{ 4, (6 * 3) + 1 }; - constexpr GridUPoint hold_background_position{ 0, 0 }; - constexpr GridUPoint grid_position = hold_background_position + GridUPoint{ preview_extends.x + 1, 0 }; - constexpr GridUPoint preview_background_position{ grid_position.x + width_in_tiles + 1, 0 }; - constexpr GridUPoint preview_tetromino_position = preview_background_position + GridUPoint{ 0, 1 }; - constexpr GridUPoint hold_tetromino_position = hold_background_position + GridUPoint{ 0, 1 }; - constexpr GridUPoint hold_background_extends = GridUPoint{ 4, 4 }; - constexpr GridUType preview_padding = 3; + constexpr GridPoint preview_extends{ 4, (6 * 3) + 1 }; + constexpr GridPoint hold_background_position{ 0, 0 }; + constexpr GridPoint grid_position = hold_background_position + GridPoint{ preview_extends.x + 1, 0 }; + constexpr GridPoint preview_background_position{ grid_position.x + width_in_tiles + 1, 0 }; + constexpr GridPoint preview_tetromino_position = preview_background_position + GridPoint{ 0, 1 }; + constexpr GridPoint hold_tetromino_position = hold_background_position + GridPoint{ 0, 1 }; + constexpr GridPoint hold_background_extends = GridPoint{ 4, 4 }; + constexpr GridType preview_padding = 3; } // namespace grid diff --git a/src/libs/core/game/mino.cpp b/src/libs/core/game/mino.cpp index 69b35d67..e32008ce 100644 --- a/src/libs/core/game/mino.cpp +++ b/src/libs/core/game/mino.cpp @@ -4,11 +4,11 @@ return m_type; } -[[nodiscard]] const grid::GridUPoint& Mino::position() const { +[[nodiscard]] const grid::GridPoint& Mino::position() const { return m_position; } -[[nodiscard]] grid::GridUPoint& Mino::position() { +[[nodiscard]] grid::GridPoint& Mino::position() { return m_position; } diff --git a/src/libs/core/game/mino.hpp b/src/libs/core/game/mino.hpp index 0f5e5092..6fd0478a 100644 --- a/src/libs/core/game/mino.hpp +++ b/src/libs/core/game/mino.hpp @@ -9,22 +9,22 @@ #include struct Mino final { public: - using ScreenCordsFunction = std::function; + using ScreenCordsFunction = std::function; private: - grid::GridUPoint m_position; + grid::GridPoint m_position; helper::TetrominoType m_type; public: - OOPETRIS_CORE_EXPORTED explicit constexpr Mino(grid::GridUPoint position, helper::TetrominoType type) + OOPETRIS_CORE_EXPORTED explicit constexpr Mino(grid::GridPoint position, helper::TetrominoType type) : m_position{ position }, m_type{ type } { } OOPETRIS_CORE_EXPORTED [[nodiscard]] helper::TetrominoType type() const; - OOPETRIS_CORE_EXPORTED [[nodiscard]] const grid::GridUPoint& position() const; + OOPETRIS_CORE_EXPORTED [[nodiscard]] const grid::GridPoint& position() const; - OOPETRIS_CORE_EXPORTED [[nodiscard]] grid::GridUPoint& position(); + OOPETRIS_CORE_EXPORTED [[nodiscard]] grid::GridPoint& position(); OOPETRIS_CORE_EXPORTED [[nodiscard]] bool operator==(const Mino& other) const; diff --git a/src/libs/core/game/mino_stack.cpp b/src/libs/core/game/mino_stack.cpp index 36666b81..06323e9e 100644 --- a/src/libs/core/game/mino_stack.cpp +++ b/src/libs/core/game/mino_stack.cpp @@ -16,13 +16,13 @@ void MinoStack::clear_row_and_let_sink(u8 row) { } } -[[nodiscard]] bool MinoStack::is_empty(grid::GridUPoint coordinates) const { +[[nodiscard]] bool MinoStack::is_empty(grid::GridPoint coordinates) const { return not std::ranges::any_of(m_minos, [&coordinates](const Mino& mino) { return mino.position() == coordinates; }); } -void MinoStack::set(grid::GridUPoint coordinates, helper::TetrominoType type) { +void MinoStack::set(grid::GridPoint coordinates, helper::TetrominoType type) { const Mino to_insert = Mino{ coordinates, type }; for (Mino& current : m_minos) { if (current.position() == coordinates) { @@ -67,10 +67,10 @@ void MinoStack::set(grid::GridUPoint coordinates, helper::TetrominoType type) { std::ostream& operator<<(std::ostream& ostream, const MinoStack& mino_stack) { ostream << "MinoStack(\n"; - for (u8 y = 0; y < grid::height_in_tiles; ++y) { - for (u8 x = 0; x < grid::width_in_tiles; ++x) { + for (i8 y = 0; y < grid::height_in_tiles; ++y) { + for (i8 x = 0; x < grid::width_in_tiles; ++x) { const auto find_iterator = std::ranges::find_if(mino_stack.minos(), [&](const auto& mino) { - return mino.position() == shapes::AbstractPoint{ x, y }; + return mino.position() == shapes::AbstractPoint{ x, y }; }); const auto found = (find_iterator != mino_stack.minos().cend()); if (found) { diff --git a/src/libs/core/game/mino_stack.hpp b/src/libs/core/game/mino_stack.hpp index 32da56d0..27555f1a 100644 --- a/src/libs/core/game/mino_stack.hpp +++ b/src/libs/core/game/mino_stack.hpp @@ -15,9 +15,9 @@ struct MinoStack final { public: OOPETRIS_CORE_EXPORTED void clear_row_and_let_sink(u8 row); - OOPETRIS_CORE_EXPORTED [[nodiscard]] bool is_empty(grid::GridUPoint coordinates) const; + OOPETRIS_CORE_EXPORTED [[nodiscard]] bool is_empty(grid::GridPoint coordinates) const; - OOPETRIS_CORE_EXPORTED void set(grid::GridUPoint coordinates, helper::TetrominoType type); + OOPETRIS_CORE_EXPORTED void set(grid::GridPoint coordinates, helper::TetrominoType type); OOPETRIS_CORE_EXPORTED [[nodiscard]] u32 num_minos() const; diff --git a/src/libs/recordings/utility/tetrion_snapshot.cpp b/src/libs/recordings/utility/tetrion_snapshot.cpp index 53e911fc..80c9a4e1 100644 --- a/src/libs/recordings/utility/tetrion_snapshot.cpp +++ b/src/libs/recordings/utility/tetrion_snapshot.cpp @@ -82,7 +82,7 @@ helper::expected TetrionSnapshot::from_istream(std }; } - mino_stack.set(grid::GridUPoint(x_coord.value(), y_coord.value()), maybe_type.value()); + mino_stack.set(grid::GridPoint(x_coord.value(), y_coord.value()), maybe_type.value()); } diff --git a/src/scenes/loading_screen/loading_screen.cpp b/src/scenes/loading_screen/loading_screen.cpp index e5afb734..47b6157c 100644 --- a/src/scenes/loading_screen/loading_screen.cpp +++ b/src/scenes/loading_screen/loading_screen.cpp @@ -15,14 +15,14 @@ scenes::LoadingScreen::LoadingScreen(ServiceProvider* service_provider) : m_segments{ - { Mino{ grid::GridUPoint{ 0, 0 }, helper::TetrominoType::J }, 1.0 }, - { Mino{ grid::GridUPoint{ 1, 0 }, helper::TetrominoType::L }, 1.0 }, - { Mino{ grid::GridUPoint{ 2, 0 }, helper::TetrominoType::I }, 1.0 }, - { Mino{ grid::GridUPoint{ 2, 1 }, helper::TetrominoType::O }, 1.0 }, - { Mino{ grid::GridUPoint{ 2, 2 }, helper::TetrominoType::S }, 1.0 }, - { Mino{ grid::GridUPoint{ 1, 2 }, helper::TetrominoType::T }, 1.0 }, - { Mino{ grid::GridUPoint{ 0, 2 }, helper::TetrominoType::I }, 1.0 }, - { Mino{ grid::GridUPoint{ 0, 1 }, helper::TetrominoType::Z }, 1.0 }, + { Mino{ grid::GridPoint{ 0, 0 }, helper::TetrominoType::J }, 1.0 }, + { Mino{ grid::GridPoint{ 1, 0 }, helper::TetrominoType::L }, 1.0 }, + { Mino{ grid::GridPoint{ 2, 0 }, helper::TetrominoType::I }, 1.0 }, + { Mino{ grid::GridPoint{ 2, 1 }, helper::TetrominoType::O }, 1.0 }, + { Mino{ grid::GridPoint{ 2, 2 }, helper::TetrominoType::S }, 1.0 }, + { Mino{ grid::GridPoint{ 1, 2 }, helper::TetrominoType::T }, 1.0 }, + { Mino{ grid::GridPoint{ 0, 2 }, helper::TetrominoType::I }, 1.0 }, + { Mino{ grid::GridPoint{ 0, 1 }, helper::TetrominoType::Z }, 1.0 }, },m_logo{logo::get_logo(service_provider)} { const auto [total_x_tiles, total_y_tiles] = utils::get_orientation() == utils::Orientation::Landscape @@ -107,7 +107,7 @@ void scenes::LoadingScreen::render(const ServiceProvider& service_provider) cons helper::graphics::render_mino( mino, service_provider, MinoTransparency::Solid, original_scale, - [this, tile_size](const grid::GridUPoint& point) -> auto { + [this, tile_size](const grid::GridPoint& point) -> auto { return this->to_screen_coords(point, tile_size); }, { tile_size, tile_size } @@ -119,7 +119,7 @@ void scenes::LoadingScreen::render(const ServiceProvider& service_provider) cons } -[[nodiscard]] shapes::UPoint scenes::LoadingScreen::to_screen_coords(const grid::GridUPoint& point, u32 tile_size) +[[nodiscard]] shapes::UPoint scenes::LoadingScreen::to_screen_coords(const grid::GridPoint& point, u32 tile_size) const { const auto start_edge = m_start_offset + point.cast() * m_tile_size; const auto inner_offset = m_tile_size - (tile_size / 2); diff --git a/src/scenes/loading_screen/loading_screen.hpp b/src/scenes/loading_screen/loading_screen.hpp index 6101f259..02dd81cd 100644 --- a/src/scenes/loading_screen/loading_screen.hpp +++ b/src/scenes/loading_screen/loading_screen.hpp @@ -27,7 +27,7 @@ namespace scenes { OOPETRIS_GRAPHICS_EXPORTED void render(const ServiceProvider& service_provider) const; private: - [[nodiscard]] shapes::UPoint to_screen_coords(const grid::GridUPoint& point, u32 tile_size) const; + [[nodiscard]] shapes::UPoint to_screen_coords(const grid::GridPoint& point, u32 tile_size) const; }; } // namespace scenes diff --git a/src/scenes/logo/logo.cpp b/src/scenes/logo/logo.cpp index 0350b174..9526b8e3 100644 --- a/src/scenes/logo/logo.cpp +++ b/src/scenes/logo/logo.cpp @@ -10,109 +10,109 @@ [[nodiscard]] Texture logo::get_logo(const ServiceProvider* service_provider, double scale) { - constexpr const grid::GridUPoint offset_o2{ 5, 0 }; - constexpr const auto offset_p3 = offset_o2 + grid::GridUPoint{ 5, 0 }; - constexpr const auto offset_e4 = offset_p3 + grid::GridUPoint{ 4, 0 }; - constexpr const auto offset_t5 = offset_e4 + grid::GridUPoint{ 4, 0 }; - constexpr const auto offset_r6 = offset_t5 + grid::GridUPoint{ 6, 0 }; - constexpr const auto offset_i7 = offset_r6 + grid::GridUPoint{ 4, 0 }; - constexpr const auto offset_s8 = offset_i7 + grid::GridUPoint{ 2, 0 }; + constexpr const grid::GridPoint offset_o2{ 5, 0 }; + constexpr const auto offset_p3 = offset_o2 + grid::GridPoint{ 5, 0 }; + constexpr const auto offset_e4 = offset_p3 + grid::GridPoint{ 4, 0 }; + constexpr const auto offset_t5 = offset_e4 + grid::GridPoint{ 4, 0 }; + constexpr const auto offset_r6 = offset_t5 + grid::GridPoint{ 6, 0 }; + constexpr const auto offset_i7 = offset_r6 + grid::GridPoint{ 4, 0 }; + constexpr const auto offset_s8 = offset_i7 + grid::GridPoint{ 2, 0 }; const std::vector minos{ // O - Mino{ grid::GridUPoint{ 0, 0 }, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 1, 0 }, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 2, 0 }, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 3, 0 }, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 3, 1 }, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 3, 2 }, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 3, 3 }, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 3, 4 }, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 2, 4 }, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 1, 4 }, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 0, 4 }, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 0, 3 }, helper::TetrominoType::S }, - Mino{ grid::GridUPoint{ 0, 2 }, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 0, 1 }, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 0, 0 }, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 1, 0 }, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 2, 0 }, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 3, 0 }, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 3, 1 }, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 3, 2 }, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 3, 3 }, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 3, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 2, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 1, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 0, 4 }, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 0, 3 }, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 0, 2 }, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 0, 1 }, helper::TetrominoType::J }, // O - Mino{ grid::GridUPoint{ 0, 0 } + offset_o2, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 1, 0 } + offset_o2, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 2, 0 } + offset_o2, helper::TetrominoType::S }, - Mino{ grid::GridUPoint{ 3, 0 } + offset_o2, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 3, 1 } + offset_o2, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 3, 2 } + offset_o2, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 3, 3 } + offset_o2, helper::TetrominoType::S }, - Mino{ grid::GridUPoint{ 3, 4 } + offset_o2, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 2, 4 } + offset_o2, helper::TetrominoType::S }, - Mino{ grid::GridUPoint{ 1, 4 } + offset_o2, helper::TetrominoType::S }, - Mino{ grid::GridUPoint{ 0, 4 } + offset_o2, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 0, 3 } + offset_o2, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 0, 2 } + offset_o2, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 0, 1 } + offset_o2, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 0, 0 } + offset_o2, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 1, 0 } + offset_o2, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 2, 0 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 3, 0 } + offset_o2, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 3, 1 } + offset_o2, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 3, 2 } + offset_o2, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 3, 3 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 3, 4 } + offset_o2, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 2, 4 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 1, 4 } + offset_o2, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 0, 4 } + offset_o2, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 0, 3 } + offset_o2, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 0, 2 } + offset_o2, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 0, 1 } + offset_o2, helper::TetrominoType::O }, // P - Mino{ grid::GridUPoint{ 0, 0 } + offset_p3, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 1, 0 } + offset_p3, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 2, 0 } + offset_p3, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 2, 1 } + offset_p3, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 2, 2 } + offset_p3, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 1, 2 } + offset_p3, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 0, 2 } + offset_p3, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 0, 1 } + offset_p3, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 0, 3 } + offset_p3, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 0, 4 } + offset_p3, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 0, 0 } + offset_p3, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 1, 0 } + offset_p3, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 2, 0 } + offset_p3, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 2, 1 } + offset_p3, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 2, 2 } + offset_p3, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 1, 2 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 0, 2 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 0, 1 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 0, 3 } + offset_p3, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 0, 4 } + offset_p3, helper::TetrominoType::S }, // E - Mino{ grid::GridUPoint{ 0, 0 } + offset_e4, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 1, 0 } + offset_e4, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 2, 0 } + offset_e4, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 0, 1 } + offset_e4, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 0, 2 } + offset_e4, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 1, 2 } + offset_e4, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 2, 2 } + offset_e4, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 0, 3 } + offset_e4, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 0, 4 } + offset_e4, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 1, 4 } + offset_e4, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 2, 4 } + offset_e4, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 0, 0 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 1, 0 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 2, 0 } + offset_e4, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 0, 1 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 0, 2 } + offset_e4, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 1, 2 } + offset_e4, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 2, 2 } + offset_e4, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 0, 3 } + offset_e4, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 0, 4 } + offset_e4, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 1, 4 } + offset_e4, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 2, 4 } + offset_e4, helper::TetrominoType::S }, // T - Mino{ grid::GridUPoint{ 0, 0 } + offset_t5, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 1, 0 } + offset_t5, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 2, 0 } + offset_t5, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 3, 0 } + offset_t5, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 4, 0 } + offset_t5, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 2, 1 } + offset_t5, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 2, 2 } + offset_t5, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 2, 3 } + offset_t5, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 2, 4 } + offset_t5, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 0, 0 } + offset_t5, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 1, 0 } + offset_t5, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 2, 0 } + offset_t5, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 3, 0 } + offset_t5, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 4, 0 } + offset_t5, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 2, 1 } + offset_t5, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 2, 2 } + offset_t5, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 2, 3 } + offset_t5, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 2, 4 } + offset_t5, helper::TetrominoType::S }, // R - Mino{ grid::GridUPoint{ 0, 0 } + offset_r6, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 1, 0 } + offset_r6, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 2, 0 } + offset_r6, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 2, 1 } + offset_r6, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 2, 2 } + offset_r6, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 1, 2 } + offset_r6, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 0, 2 } + offset_r6, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 0, 1 } + offset_r6, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 0, 3 } + offset_r6, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 1, 3 } + offset_r6, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 0, 4 } + offset_r6, helper::TetrominoType::S }, - Mino{ grid::GridUPoint{ 2, 4 } + offset_r6, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 0, 0 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 1, 0 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 2, 0 } + offset_r6, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 2, 1 } + offset_r6, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 2, 2 } + offset_r6, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 1, 2 } + offset_r6, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 0, 2 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 0, 1 } + offset_r6, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 0, 3 } + offset_r6, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 1, 3 } + offset_r6, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 0, 4 } + offset_r6, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 2, 4 } + offset_r6, helper::TetrominoType::S }, // I - Mino{ grid::GridUPoint{ 0, 0 } + offset_i7, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 0, 1 } + offset_i7, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 0, 2 } + offset_i7, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 0, 3 } + offset_i7, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 0, 4 } + offset_i7, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 0, 0 } + offset_i7, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 0, 1 } + offset_i7, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 0, 2 } + offset_i7, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 0, 3 } + offset_i7, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 0, 4 } + offset_i7, helper::TetrominoType::S }, // S - Mino{ grid::GridUPoint{ 0, 0 } + offset_s8, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 1, 0 } + offset_s8, helper::TetrominoType::Z }, - Mino{ grid::GridUPoint{ 2, 0 } + offset_s8, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 2, 2 } + offset_s8, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 1, 2 } + offset_s8, helper::TetrominoType::L }, - Mino{ grid::GridUPoint{ 0, 2 } + offset_s8, helper::TetrominoType::J }, - Mino{ grid::GridUPoint{ 0, 1 } + offset_s8, helper::TetrominoType::I }, - Mino{ grid::GridUPoint{ 2, 3 } + offset_s8, helper::TetrominoType::T }, - Mino{ grid::GridUPoint{ 0, 4 } + offset_s8, helper::TetrominoType::S }, - Mino{ grid::GridUPoint{ 1, 4 } + offset_s8, helper::TetrominoType::O }, - Mino{ grid::GridUPoint{ 2, 4 } + offset_s8, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 0, 0 } + offset_s8, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 1, 0 } + offset_s8, helper::TetrominoType::Z }, + Mino{ grid::GridPoint{ 2, 0 } + offset_s8, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 2, 2 } + offset_s8, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 1, 2 } + offset_s8, helper::TetrominoType::L }, + Mino{ grid::GridPoint{ 0, 2 } + offset_s8, helper::TetrominoType::J }, + Mino{ grid::GridPoint{ 0, 1 } + offset_s8, helper::TetrominoType::I }, + Mino{ grid::GridPoint{ 2, 3 } + offset_s8, helper::TetrominoType::T }, + Mino{ grid::GridPoint{ 0, 4 } + offset_s8, helper::TetrominoType::S }, + Mino{ grid::GridPoint{ 1, 4 } + offset_s8, helper::TetrominoType::O }, + Mino{ grid::GridPoint{ 2, 4 } + offset_s8, helper::TetrominoType::I }, }; const auto tile_size = static_cast(static_cast(grid::original_tile_size) * scale); @@ -134,7 +134,7 @@ for (const auto& mino : minos) { helper::graphics::render_mino( mino, *service_provider, MinoTransparency::Solid, original_scale, - [tile_size](const grid::GridUPoint& point) -> auto { return point.cast() * tile_size; }, + [tile_size](const grid::GridPoint& point) -> auto { return point.cast() * tile_size; }, { tile_size, tile_size } ); }