Grid.gd 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. class_name Grid
  2. extends Node2D
  3. signal kace_broken
  4. signal kace_damaged
  5. signal has_moved
  6. enum State {
  7. DONE,
  8. MOVING,
  9. }
  10. const Brick = preload("res://component/entity/brick/Brick.tscn")
  11. const BRICK_SIZE = 20
  12. export (float) var moving_time = 1.0
  13. var current_state = State.DONE
  14. var current_row = 1
  15. onready var tween = $MoveDown
  16. func generate_and_move() -> void:
  17. generate_row()
  18. current_state = State.MOVING
  19. start_moving()
  20. func generate_row() -> void:
  21. for x in range(10):
  22. generate_cell(x, -current_row)
  23. func generate_cell(x: int, y: int) -> void:
  24. if randi() % 2 : # 50% of generation
  25. build_brick(x, y)
  26. func build_brick(x: int, y: int) -> void:
  27. var brick = Brick.instance()
  28. brick.setup(x, y, current_row * current_row)
  29. brick.connect("kace_broken", self, "_on_Brick_kace_broken")
  30. brick.connect("kace_damaged", self, "_on_Brick_kace_damaged")
  31. add_child(brick)
  32. func start_moving() -> void:
  33. current_row += 1
  34. tween.interpolate_property(self, "position", position,
  35. position + Vector2(0, BRICK_SIZE), moving_time,
  36. Tween.TRANS_QUART, Tween.EASE_IN_OUT)
  37. tween.start()
  38. func finish_moving() -> void:
  39. current_state = State.DONE
  40. emit_signal("has_moved")
  41. func _ready() -> void:
  42. randomize()
  43. generate_and_move()
  44. func _on_Launcher_is_full() -> void:
  45. generate_and_move()
  46. func _on_MoveDown_tween_all_completed() -> void:
  47. finish_moving()
  48. func _on_Brick_kace_broken() -> void:
  49. emit_signal("kace_broken")
  50. func _on_Brick_kace_damaged() -> void:
  51. emit_signal("kace_damaged")