extends Node2D signal get_firing signal is_full enum State { READY, FIRING, WAITING, } export var BULLET_SPEED = 500.0 var _ballScene = preload("res://scenes/Ball.tscn") var nbAmmo = 0 var nbStorage = 1 onready var target = $Target onready var source = $Source onready var shootDelay = $ShootDelay onready var grid = $Grid onready var current_state = State.WAITING func _ready(): get_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) bullet.connect("tree_exited", self, "_on_Ball_tree_exited") bullet.connect("kace_contact", grid, "_on_Ball_kace_contact") func load_bullet(n:int): nbStorage += n func get_ready(): current_state = State.READY target.position = source.position nbAmmo = nbStorage nbStorage = 0 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() func _on_Ball_tree_exited(): load_bullet(1) if (get_tree().get_nodes_in_group("ball").size() == 0): emit_signal("is_full") func _on_Grid_has_moved(): get_ready() func _on_Grid_kace_broken(): load_bullet(1)