Launcher.gd 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. extends Node2D
  2. signal get_firing
  3. signal is_full
  4. signal gain_new_bullet
  5. signal interrupt_wave
  6. enum State {
  7. READY,
  8. FIRING,
  9. WAITING,
  10. INTERRUPTING,
  11. }
  12. export var BULLET_SPEED = 500.0
  13. var _ballScene = preload("res://scenes/Ball.tscn")
  14. var nbAmmo = 0
  15. var nbStorage = 1
  16. onready var target = $Target
  17. onready var source = $Source
  18. onready var shootDelay = $ShootDelay
  19. onready var grid = $Grid
  20. onready var current_state = State.WAITING
  21. func _ready():
  22. get_ready()
  23. func _input(event):
  24. if event is InputEventMouseButton and event.is_pressed() :
  25. trigger(event.position)
  26. elif event is InputEventMouseMotion and current_state == State.READY:
  27. target.position = event.position
  28. func trigger(aim:Vector2):
  29. if (current_state == State.READY):
  30. current_state = State.FIRING
  31. target.position = aim
  32. emit_signal("get_firing")
  33. elif (current_state == State.WAITING):
  34. current_state = State.INTERRUPTING
  35. emit_signal("interrupt_wave")
  36. func shoot():
  37. var bullet = _ballScene.instance()
  38. bullet.position = source.position
  39. bullet.linear_velocity = (target.position - source.position).normalized()
  40. bullet.linear_velocity *= BULLET_SPEED
  41. add_child(bullet)
  42. bullet.connect("tree_exited", self, "_on_Ball_tree_exited")
  43. bullet.connect("kace_contact", grid, "_on_Ball_kace_contact")
  44. self.connect("interrupt_wave", bullet, "_on_Launcher_interrupt_wave")
  45. func gain_new_bullet():
  46. load_bullet(1)
  47. emit_signal("gain_new_bullet")
  48. func load_bullet(n:int):
  49. nbStorage += n
  50. func get_ready():
  51. current_state = State.READY
  52. target.position = source.position
  53. nbAmmo = nbStorage
  54. nbStorage = 0
  55. func _on_ShootDelay_timeout():
  56. shoot()
  57. nbAmmo -= 1
  58. if (nbAmmo == 0):
  59. current_state = State.WAITING
  60. else:
  61. emit_signal("get_firing")
  62. func _on_Launcher_get_firing():
  63. shootDelay.start()
  64. func _on_Ball_tree_exited():
  65. load_bullet(1)
  66. if (get_tree().get_nodes_in_group("ball").size() == 0):
  67. emit_signal("is_full")
  68. func _on_Grid_has_moved():
  69. get_ready()
  70. func _on_Grid_kace_broken():
  71. gain_new_bullet()