class_name Board
@export var block_size: int = 20
-@export var cell_catalogue: Array[PackedScene]
+@export var piece_catalogue: Array[PackedScene] = []
var _grid_filled: Array[bool] = []
var _player_position: Vector2i = Vector2i.ZERO
-var _player_cell: Cell = null
+var _player_piece: Piece = null
var _grid_final_y_row: int = 0
var _grid_final_x_row: int = 0
var _num_pieces: int = 0
func _ready() -> void:
+ assert(piece_catalogue.size() >= 1, "Expected at least one piece in catalogue")
+
+ # calculate grid
_grid_final_y_row = size.y / block_size
_grid_final_x_row = size.x / block_size
print("Grid is " + str(_grid_final_x_row) + " by " + str(_grid_final_y_row))
func _input(event: InputEvent) -> void:
if event.is_action_pressed("player_left"):
- _move_cell(Vector2i(-1, 0))
+ _move(Vector2i(-1, 0))
elif event.is_action_pressed("player_right"):
- _move_cell(Vector2i(1, 0))
+ _move(Vector2i(1, 0))
if event.is_action_pressed("player_up"):
# TODO: rotate
pass
if event.is_action("player_down"):
- _move_cell(Vector2i(0, 1))
+ _move(Vector2i(0, 1))
-func _add_player_cell():
- var scene: PackedScene = cell_catalogue.pick_random()
- var cell: Cell = scene.instantiate()
- cell.block_size = block_size
+func _add_player_piece():
+ var scene: PackedScene = piece_catalogue.pick_random()
+ var piece: Piece = scene.instantiate()
+ piece.block_size = block_size
_player_position = Vector2i(5, 0)
- cell.position = _player_position * block_size
- _player_cell = cell
+ piece.position = _player_position * block_size
+ _player_piece = piece
- add_child(cell)
+ add_child(piece)
_num_pieces += 1
- print("Added piece: " + str(_num_pieces))
+ print(str(piece))
-func _move_cell(v: Vector2i):
+func _move(v: Vector2i):
var new_player_position: Vector2i = _player_position + v
if new_player_position.x < 0 or new_player_position.x >= _grid_final_x_row:
# update player position
_player_position = new_player_position
- if _player_cell:
- _player_cell.position = _player_position * block_size
+ if _player_piece:
+ _player_piece.position = _player_position * block_size
# if at the bottom of the grid, we're done
if (_player_position.y == _grid_final_y_row - 1):
_end_round()
func _end_round():
- print("Time for a new piece!")
# disconnect player controls from current piece
- _player_cell = null
+ _player_piece = null
# fill in collision grid with piece cells
_set_grid_position(_player_position, true)
- #_print_grid()
# now start a new round
_on_turn_timer_timeout()
func _on_turn_timer_timeout() -> void:
- if _player_cell == null:
- _add_player_cell()
+ if _player_piece == null:
+ _add_player_piece()
else:
- _move_cell(Vector2i(0, 1))
+ _move(Vector2i(0, 1))
%turnTimer.start()