Grid.gd 1.3 KB

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