12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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)
|