Launcher.gd 2.1 KB

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