class_name Grid extends Node2D signal kace_broken signal kace_damaged signal has_moved enum State { DONE, MOVING, } const Brick = preload("res://component/entity/brick/Brick.tscn") const BRICK_SIZE = 20 export (float) var moving_time = 1.0 var current_state = State.DONE var current_row = 1 onready var tween = $MoveDown func generate_and_move() -> void: generate_row() current_state = State.MOVING start_moving() func generate_row() -> void: for x in range(10): generate_cell(x, -current_row) func generate_cell(x: int, y: int) -> void: if randi() % 2 : # 50% of generation build_brick(x, y) func build_brick(x: int, y: int) -> void: var brick = Brick.instance() brick.setup(x, y, current_row * current_row) brick.connect("kace_broken", self, "_on_Brick_kace_broken") brick.connect("kace_damaged", self, "_on_Brick_kace_damaged") add_child(brick) func start_moving() -> void: current_row += 1 tween.interpolate_property(self, "position", position, position + Vector2(0, BRICK_SIZE), moving_time, Tween.TRANS_QUART, Tween.EASE_IN_OUT) tween.start() func finish_moving() -> void: current_state = State.DONE emit_signal("has_moved") func _ready() -> void: randomize() generate_and_move() func _on_Launcher_is_full() -> void: generate_and_move() func _on_MoveDown_tween_all_completed() -> void: finish_moving() func _on_Brick_kace_broken() -> void: emit_signal("kace_broken") func _on_Brick_kace_damaged() -> void: emit_signal("kace_damaged")