Grid.gd 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. const START_POSITION = Vector2(0, 0)
  13. export (float) var moving_time = 1.0
  14. var current_state = State.DONE
  15. var current_row = 1
  16. onready var tween = $MoveDown
  17. func generate_and_move() -> void:
  18. generate_row()
  19. current_state = State.MOVING
  20. start_moving()
  21. func generate_row() -> void:
  22. for x in range(10):
  23. generate_cell(x, -current_row)
  24. func generate_cell(x: int, y: int) -> void:
  25. if randi() % 2 : # 50% of generation
  26. build_brick(x, y)
  27. func build_brick(x: int, y: int) -> void:
  28. var brick = Brick.instance()
  29. brick.setup(x, y, current_row * current_row)
  30. brick.connect("kace_broken", self, "_on_Brick_kace_broken")
  31. brick.connect("kace_damaged", self, "_on_Brick_kace_damaged")
  32. add_child(brick)
  33. func start_moving() -> void:
  34. current_row += 1
  35. tween.interpolate_property(self, "position", position,
  36. position + Vector2(0, BRICK_SIZE), moving_time,
  37. Tween.TRANS_QUART, Tween.EASE_IN_OUT)
  38. tween.start()
  39. func finish_moving() -> void:
  40. current_state = State.DONE
  41. emit_signal("has_moved")
  42. func reset() -> void:
  43. destroy_every_brick()
  44. position = START_POSITION
  45. current_state = State.DONE
  46. current_row = 1
  47. func destroy_every_brick() -> void:
  48. for brick in get_tree().get_nodes_in_group("brick"):
  49. brick.blow_up()
  50. func _ready() -> void:
  51. randomize()
  52. generate_and_move()
  53. func _on_Launcher_is_full() -> void:
  54. generate_and_move()
  55. func _on_MoveDown_tween_all_completed() -> void:
  56. finish_moving()
  57. func _on_Brick_kace_broken() -> void:
  58. emit_signal("kace_broken")
  59. func _on_Brick_kace_damaged() -> void:
  60. emit_signal("kace_damaged")
  61. func _on_Game_start_new_game():
  62. reset()
  63. generate_and_move()