Proper firing logic handling

This commit is contained in:
Alexey 2025-07-26 18:10:44 +03:00
commit 6a317d1913
12 changed files with 44 additions and 20 deletions

View file

@ -24,6 +24,8 @@ func _process() -> void:
if _fire():
on_fire()
func _on_fire_end() -> void:
fire_allowed.emit()
## Invoked when cooldown has ended
func on_cooldown_timeout() -> void:

View file

@ -7,6 +7,9 @@ class_name BaseFireMode
var barrel : Barrel
var tree : SceneTree
## Emits when it's possible to request fire from outside
signal fire_allowed
func _init() -> void:
resource_local_to_scene = true

View file

@ -26,3 +26,4 @@ func _on_fire_begin() -> void:
## Invoked when cooldown has ended
func on_cooldown_timeout() -> void:
cooldown = false
fire_allowed.emit()

View file

@ -4,12 +4,13 @@ class_name Weapon
signal fired()
signal fire_failed()
signal fire_allowed()
@onready var barrel = $"Barrel"
@export var uses_hands: Array[CommandQueue.Side]
@export var max_ammo: int = 7
var ammo: int = max_ammo
var ammo: int
@export var ammo_consumption: int = 1
@export var fire_mode: BaseFireMode
@ -20,15 +21,19 @@ var ammo: int = max_ammo
var is_firing: bool = false
func _ready() -> void:
ammo = max_ammo
fire_mode.barrel = barrel
fire_mode.tree = get_tree()
fire_mode.fire_allowed.connect(on_fire_allowed)
barrel.fired.connect(on_barrel_fired)
## Begin to fire
func request_fire() -> void:
if not is_firing and ammo >= ammo_consumption:
is_firing = true
fire_mode._on_fire_begin()
elif ammo < ammo_consumption:
end_fire()
fire_failed.emit()
func _process(_dt) -> void:
@ -45,6 +50,12 @@ func on_barrel_fired() -> void:
is_firing = true
ammo -= ammo_consumption
fired.emit()
if ammo < ammo_consumption:
end_fire()
func on_fire_allowed() -> void:
fire_allowed.emit()
is_firing = false
func reload() -> void:
ammo = max_ammo