extends Node2D signal get_firing enum State { READY, FIRING, WAITING, } const BULLET_SPEED = 200.0 var _ballScene = preload("res://scenes/Ball.tscn") var nbAmmo = 5 onready var target = $Target onready var source = $Source onready var shootDelay = $ShootDelay onready var current_state = State.READY func _input(event): if event is InputEventMouseButton and event.is_pressed() : trigger(event.position) func trigger(aim:Vector2): if (current_state == State.READY): current_state = State.FIRING target.position = aim emit_signal("get_firing") func shoot(): var bullet = _ballScene.instance() bullet.position = source.position bullet.linear_velocity = (target.position - source.position).normalized() bullet.linear_velocity *= BULLET_SPEED add_child(bullet) func _on_ShootDelay_timeout(): shoot() nbAmmo -= 1 if (nbAmmo == 0): current_state = State.WAITING else: emit_signal("get_firing") func _on_Launcher_get_firing(): shootDelay.start()