Launcher.gd 1.5 KB

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