extends TileMap signal kace_broken signal has_moved enum Tile { BRICK = 0, } enum State { DONE, MOVING, } var current_state = State.DONE var current_row = 1 var living_cells = {} func generate_and_move(): generate_row() current_state = State.MOVING move() current_state = State.DONE func generate_row(): for x in range(10): generate_cell(x, -current_row) func generate_cell(x, y): if randi() % 2 : # 50% of generation build_brick(x, y) func build_brick(x, y): set_cell(x, y, Tile.BRICK) living_cells[Vector2(x, y)] = current_row func damage_cell(tile_pos : Vector2): var cell_id = get_cellv(tile_pos) if cell_id != TileMap.INVALID_CELL and cell_id == Tile.BRICK: living_cells[tile_pos] -= 1 if living_cells[tile_pos] <= 0: break_cell(tile_pos) func break_cell(tile_pos): living_cells.erase(tile_pos) set_cellv(tile_pos, -1) emit_signal("kace_broken") func move(): current_row += 1 position.y += cell_size.y func _ready(): randomize() generate_and_move() func _on_Ball_kace_contact(contact_pos:Vector2): var local_position = to_local(contact_pos) var tile_pos = world_to_map(local_position) damage_cell(tile_pos) func _on_Launcher_is_full(): generate_and_move() emit_signal("has_moved")