extends TileMap signal kace_broken signal kace_damaged signal has_moved enum Tile { BRICK = 0, } enum State { DONE, MOVING, } export (float) var moving_time = 1.0 onready var life_container = $LifeContainer onready var tween = $MoveDown var current_state = State.DONE var current_row = 1 func generate_and_move(): generate_row() current_state = State.MOVING start_moving() 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) life_container.spawn_brick(x, y, current_row * 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: emit_signal("kace_damaged") if life_container.may_die_by_taking_this(tile_pos, 1): break_cell(tile_pos) func break_cell(tile_pos): set_cellv(tile_pos, -1) emit_signal("kace_broken") func start_moving(): current_row += 1 tween.interpolate_property(self, "position", position, position + Vector2(0, cell_size.y), moving_time, Tween.TRANS_QUART, Tween.EASE_IN_OUT) tween.start() func finish_moving(): current_state = State.DONE emit_signal("has_moved") 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() func _on_MoveDown_tween_all_completed(): finish_moving()