1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- extends Node2D
- signal get_firing
- enum State {
- READY,
- FIRING,
- WAITING,
- }
- const BULLET_SPEED = 300.0
- var _ballScene = preload("res://scenes/Ball.tscn")
- var nbAmmo = 1
- var nbStorage = 0
- onready var target = $Target
- onready var source = $Source
- onready var shootDelay = $ShootDelay
- onready var grid = $Grid
- 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
- bullet.grid = grid
- add_child(bullet)
- bullet.connect("tree_exited", self, "_on_Ball_tree_exited")
- func loadBullet(n:int):
- nbStorage += n
- 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():
- loadBullet(1)
- if (get_tree().get_nodes_in_group("ball").size() == 0):
- current_state = State.READY
- target.position = source.position
- nbAmmo = nbStorage
- nbStorage = 0
|