From: Clifton Palmer Date: Thu, 27 Mar 2025 13:19:41 +0000 (+0200) Subject: Finished rotations, still have border problems X-Git-Url: http://git.purplebirdman.com/catris.git/commitdiff_plain/859af48f3aea3fd3dde07c42a79d795feb905761 Finished rotations, still have border problems --- diff --git a/script/board.gd b/script/board.gd index 6109ed3..2e90425 100644 --- a/script/board.gd +++ b/script/board.gd @@ -16,6 +16,7 @@ var _grid_final_y_row: int = 0 var _grid_final_x_row: int = 0 var num_pieces: int = 0 +const start_pos: Vector2i = Vector2i(5, 2) func _ready() -> void: assert(piece_catalogue.size() >= 1, "Expected at least one piece in catalogue") @@ -53,7 +54,7 @@ func _add_player_piece(): piece.block_size = block_size # TODO: start piece at center of board - _player_position = Vector2i(5, 0) + _player_position = start_pos piece.position = _player_position * block_size _player_piece = piece diff --git a/script/piece.gd b/script/piece.gd index 33a9c7d..fb82e44 100644 --- a/script/piece.gd +++ b/script/piece.gd @@ -33,23 +33,30 @@ func _ready() -> void: func _to_string() -> String: - return "%d: %s" % [rotation_degrees, str(get_cell_grid())] + return "%d: %s" % [_rotation_angles[_rotation_index % _rotation_angles.size()], str(get_cell_grid())] func get_cell_grid() -> Array: - if rotation_degrees == 0.0: - return _cell_grid - elif rotation_degrees == 90.0: - return _cell_grid.map(func f(v): return Vector2i(v.y, v.x)) - elif rotation_degrees == 180.0: + var rot = _rotation_angles[_rotation_index % _rotation_angles.size()] + + if rot == 0.0: + return _cell_grid.duplicate() + elif rot == 90.0: + return _cell_grid.map(func f(v): return Vector2i(-v.y, v.x)) + elif rot == 180.0: return _cell_grid.map(func f(v): return Vector2i(-v.x, -v.y)) - elif rotation_degrees == 270.0: - return _cell_grid.map(func f(v): return Vector2i(-v.y, -v.x)) + elif rot == 270.0: + return _cell_grid.map(func f(v): return Vector2i(v.y, -v.x)) else: - assert(false, "Invalid rotation: " + str(global_rotation_degrees)) - return [] + assert(false, "Invalid rotation: " + str(rot)) + return _cell_grid.duplicate() func rotate_left(): _rotation_index += 1 - rotation_degrees = _rotation_angles[_rotation_index % _rotation_angles.size()] + var new_cell_grid = get_cell_grid() + + for c in cells: + var new_pos: Vector2i = new_cell_grid.pop_front() + c.position.x = new_pos.x * block_size + c.position.y = new_pos.y * block_size