X-Git-Url: http://git.purplebirdman.com/catris.git/blobdiff_plain/5b090c35e5d741efe235ce84a2dd124828858863..859af48f3aea3fd3dde07c42a79d795feb905761:/script/piece.gd diff --git a/script/piece.gd b/script/piece.gd index aa50f0a..fb82e44 100644 --- a/script/piece.gd +++ b/script/piece.gd @@ -7,7 +7,11 @@ class_name Piece var cells: Array[Cell] = [] var block_size: int = 0 -var cell_grid: Array[Vector2i] = [] +var _cell_grid: Array[Vector2i] = [] + +var _rotation_angles: Array[float] = [0.0, 90.0, 180.0, 270.0] +var _rotation_index: int = 0 + func _ready() -> void: for c in self.get_children(): @@ -25,4 +29,34 @@ func _ready() -> void: for c in cells: var pos_x: int = floori(c.position.x / block_size) var pos_y: int = floori(c.position.y / block_size) - cell_grid.append(Vector2i(pos_x, pos_y)) + _cell_grid.append(Vector2i(pos_x, pos_y)) + + +func _to_string() -> String: + return "%d: %s" % [_rotation_angles[_rotation_index % _rotation_angles.size()], str(get_cell_grid())] + + +func get_cell_grid() -> Array: + 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 rot == 270.0: + return _cell_grid.map(func f(v): return Vector2i(v.y, -v.x)) + else: + assert(false, "Invalid rotation: " + str(rot)) + return _cell_grid.duplicate() + + +func rotate_left(): + _rotation_index += 1 + 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