Launcher.gd 1.6 KB

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