if event.is_action_pressed("player_up"):
if _player_piece:
- _player_piece.rotate_left()
- print(_player_piece.to_string())
+ _player_piece.rotate_cells_left()
+
+ # if player piece has cells off to the right or left of the board,
+ # then shift it back onto the board
+ var leftmost: int = 0
+ var rightmost: int = 0
+ for pos: Vector2i in _player_piece.get_cell_grid():
+ pos += _player_position # remember, pos is relative!
+ if pos.x < leftmost:
+ leftmost = pos.x
+ elif pos.x > _grid_final_x_row - 1 and pos.x > rightmost:
+ rightmost = pos.x - _grid_final_x_row - 1
+
+
+ print("l,r: %d, %d" % [leftmost, rightmost])
+
+ if leftmost < 0:
+ _move(-Vector2i(leftmost, 0))
+ elif rightmost > 0:
+ _move(-Vector2i(rightmost, 0))
if event.is_action_pressed("player_down"):
# move piece to bottom
return _cell_grid.duplicate()
-func rotate_left():
+func rotate_cells_right():
+ _rotation_index -= 1
+ rotate_cells()
+
+
+func rotate_cells_left():
_rotation_index += 1
+ rotate_cells()
+
+
+func rotate_cells():
var new_cell_grid = get_cell_grid()
for c in cells: