123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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
- const START_POSITION = Vector2(0, 0)
- 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 reset() -> void:
- destroy_every_brick()
- position = START_POSITION
- current_state = State.DONE
- current_row = 1
- func destroy_every_brick() -> void:
- for brick in get_tree().get_nodes_in_group("brick"):
- brick.blow_up()
- 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")
- func _on_Game_start_new_game():
- reset()
- generate_and_move()
|