_player_piece.rotate_left()
print(_player_piece.to_string())
- if event.is_action("player_down"):
- _move(Vector2i(0, 1))
+ if event.is_action_pressed("player_down"):
+ # move piece to bottom
+ var b := true
+ while b:
+ b = _move(Vector2i(0, 1))
func _add_player_piece():
added_piece.emit()
-func _move(v: Vector2i):
+# returns TRUE if piece can move more, FALSE if end state
+func _move(v: Vector2i) -> bool:
assert(_player_piece != null, "Player piece must not be null")
var new_player_position: Vector2i = _player_position + v
pos += new_player_position
if pos.x < 0 or pos.x >= _grid_final_x_row:
# ignore input that moves beyond lateral boundaries
- return
+ return false
if _is_grid_position_taken(pos):
# if movement is vertical and blocked, then we're done
if v.y != 0:
end_round.emit()
- return
+ return false
# update player position
_player_position = new_player_position
pos += _player_position
if (pos.y >= _grid_final_y_row - 1):
end_round.emit()
+ return false
+
+ return true
func _on_end_round():
+ # disconnect player controls from current piece
+ var piece: Piece = _player_piece
+ _player_piece = null
+
# fill in collision grid with piece cells
- for pos: Vector2i in _player_piece.get_cell_grid():
+ for pos: Vector2i in piece.get_cell_grid():
pos += _player_position
_set_grid_position(pos, true)
-
- # disconnect player controls from current piece
- _player_piece = null
# now start a new round
_on_turn_timer_timeout()