@@ -132,7 +132,7 @@ void SimulatedTetrion::spawn_next_tetromino(
132132 const helper::TetrominoType type,
133133 const SimulationStep simulation_step_index
134134) {
135- constexpr grid::GridUPoint spawn_position{ 3 , 0 };
135+ constexpr grid::GridPoint spawn_position{ 3 , 0 };
136136 m_active_tetromino = Tetromino{ spawn_position, type };
137137 refresh_previews ();
138138 if (not is_active_tetromino_position_valid ()) {
@@ -141,12 +141,12 @@ void SimulatedTetrion::spawn_next_tetromino(
141141 auto current_pieces = m_active_tetromino.value ().minos ();
142142
143143 bool all_valid{ false };
144- u8 move_up = 0 ;
144+ i8 move_up = 0 ;
145145 while (not all_valid) {
146146 all_valid = true ;
147147 for (auto & mino : current_pieces) {
148148 if (mino.position ().y != 0 ) {
149- mino.position () = mino.position () - grid::GridUPoint { 0 , 1 };
149+ mino.position () = mino.position () - grid::GridPoint { 0 , 1 };
150150 if (not is_valid_mino_position (mino.position ())) {
151151 all_valid = false ;
152152 }
@@ -159,7 +159,7 @@ void SimulatedTetrion::spawn_next_tetromino(
159159 for (const Mino& mino : m_active_tetromino->minos ()) {
160160 auto position = mino.position ();
161161 if (mino.position ().y >= move_up && move_up != 0 ) {
162- position -= grid::GridUPoint { 0 , move_up };
162+ position -= grid::GridPoint { 0 , move_up };
163163 m_mino_stack.set (position, mino.type ());
164164 }
165165 }
@@ -289,10 +289,10 @@ void SimulatedTetrion::clear_fully_occupied_lines() {
289289 const u32 lines_cleared_before = m_lines_cleared;
290290 do { // NOLINT(cppcoreguidelines-avoid-do-while)
291291 cleared = false ;
292- for (u8 row = 0 ; row < grid::height_in_tiles; ++row) {
292+ for (i8 row = 0 ; row < grid::height_in_tiles; ++row) {
293293 bool fully_occupied = true ;
294- for (u8 column = 0 ; column < grid::width_in_tiles; ++column) {
295- if (m_mino_stack.is_empty (grid::GridUPoint { column, row })) {
294+ for (i8 column = 0 ; column < grid::width_in_tiles; ++column) {
295+ if (m_mino_stack.is_empty (grid::GridPoint { column, row })) {
296296 fully_occupied = false ;
297297 break ;
298298 }
@@ -355,16 +355,18 @@ bool SimulatedTetrion::is_active_tetromino_position_valid() const {
355355 return is_tetromino_position_valid (m_active_tetromino.value ());
356356}
357357
358- bool SimulatedTetrion::is_valid_mino_position (grid::GridUPoint position) const {
359- return position.x < grid::width_in_tiles and position.y < grid::height_in_tiles and m_mino_stack.is_empty (position);
358+ bool SimulatedTetrion::is_valid_mino_position (grid::GridPoint position) const {
359+
360+ return position.x >= 0 and position.x < grid::width_in_tiles and position.y >= 0
361+ and position.y < grid::height_in_tiles and m_mino_stack.is_empty (position);
360362}
361363
362- bool SimulatedTetrion::mino_can_move_down (grid::GridUPoint position) const {
364+ bool SimulatedTetrion::mino_can_move_down (grid::GridPoint position) const {
363365 if (position.y == (grid::height_in_tiles - 1 )) {
364366 return false ;
365367 }
366368
367- return is_valid_mino_position (position + grid::GridUPoint { 0 , 1 });
369+ return is_valid_mino_position (position + grid::GridPoint { 0 , 1 });
368370}
369371
370372
@@ -384,7 +386,7 @@ void SimulatedTetrion::refresh_previews() {
384386 auto bag_index = usize{ 0 };
385387 for (std::remove_cvref_t <decltype (num_preview_tetrominos)> i = 0 ; i < num_preview_tetrominos; ++i) {
386388 m_preview_tetrominos.at (static_cast <usize>(i)) = Tetromino{
387- grid::preview_tetromino_position + shapes::UPoint { 0 , static_cast < u32 >( grid::preview_padding * i) },
389+ grid::preview_tetromino_position + shapes::IPoint { 0 , grid::preview_padding * i },
388390 m_sequence_bags.at (bag_index)[sequence_index]
389391 };
390392 ++sequence_index;
0 commit comments