Launcher.gd 1.3 KB

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