auto mode and burst mode refactor
This commit is contained in:
parent
64127797fb
commit
63e8211b6c
3 changed files with 59 additions and 36 deletions
49
base/scripts/weapons/fire_mode/auto_fire_mode.gd
Normal file
49
base/scripts/weapons/fire_mode/auto_fire_mode.gd
Normal file
|
@ -0,0 +1,49 @@
|
|||
extends BaseFireMode
|
||||
|
||||
## Firemode that fires automatically
|
||||
|
||||
class_name AutoFireMode
|
||||
|
||||
|
||||
## Delay between shots [br]
|
||||
@export var fire_delay : float
|
||||
|
||||
## Is fire mode on delay?
|
||||
var cooldown : bool = false
|
||||
|
||||
## Reference to cooldown scene timer
|
||||
var cooldown_timer : SceneTreeTimer = null
|
||||
|
||||
func _on_fire_begin(_tree : SceneTree) -> void:
|
||||
cooldown = false
|
||||
check_unfinished_timer(cooldown_timer,on_cooldown_timeout)
|
||||
|
||||
|
||||
func _process(tree : SceneTree) -> void:
|
||||
if can_fire() :
|
||||
return
|
||||
if _fire():
|
||||
on_fire(tree)
|
||||
|
||||
|
||||
## Invoked when cooldown has ended
|
||||
func on_cooldown_timeout() -> void:
|
||||
cooldown = false
|
||||
cooldown_timer = null
|
||||
|
||||
|
||||
## Checks if timer is unfinished and unbounds to avoid errors
|
||||
func check_unfinished_timer(timer : SceneTreeTimer, bounded_callable : Callable) -> void:
|
||||
if timer == null:
|
||||
return
|
||||
timer.timeout.disconnect(bounded_callable)
|
||||
|
||||
## Checks if can fire
|
||||
func can_fire() -> bool:
|
||||
return cooldown
|
||||
|
||||
## Invoked when fired
|
||||
func on_fire(tree : SceneTree) -> void:
|
||||
cooldown = true
|
||||
cooldown_timer = tree.create_timer(fire_delay)
|
||||
cooldown_timer.timeout.connect(on_cooldown_timeout)
|
1
base/scripts/weapons/fire_mode/auto_fire_mode.gd.uid
Normal file
1
base/scripts/weapons/fire_mode/auto_fire_mode.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://dsvgbyeerw1ld
|
|
@ -1,4 +1,4 @@
|
|||
extends BaseFireMode
|
||||
extends AutoFireMode
|
||||
|
||||
## Fire mode that fires in bursts
|
||||
class_name BurstFireMode
|
||||
|
@ -10,9 +10,6 @@ class_name BurstFireMode
|
|||
## Time to reload a burst
|
||||
@export var reload_time : float
|
||||
|
||||
## Delay between shots [br]
|
||||
@export var fire_delay : float
|
||||
|
||||
## Amount of bullets currently [br]
|
||||
## Resets in _on_fire_end
|
||||
var current_amount : int = 0
|
||||
|
@ -20,33 +17,22 @@ var current_amount : int = 0
|
|||
## Is burst currently reloading
|
||||
var reloading : bool = false
|
||||
|
||||
## Is fire mode on delay?
|
||||
var cooldown : bool = false
|
||||
|
||||
## Reference to reload scene timer
|
||||
var reload_timer : SceneTreeTimer = null
|
||||
|
||||
## Reference to cooldown scene timer
|
||||
var cooldown_timer : SceneTreeTimer = null
|
||||
|
||||
func _on_fire_begin(_tree : SceneTree) -> void:
|
||||
super._on_fire_begin(_tree)
|
||||
current_amount = 0
|
||||
reloading = false
|
||||
cooldown = false
|
||||
check_unfinished_timer(reload_timer,on_reload_timeout)
|
||||
check_unfinished_timer(cooldown_timer,on_cooldown_timeout)
|
||||
|
||||
|
||||
func _process(_tree : SceneTree) -> void:
|
||||
if reloading or cooldown:
|
||||
return
|
||||
if _fire():
|
||||
func on_fire(tree : SceneTree) -> void:
|
||||
super.on_fire(tree)
|
||||
current_amount += 1
|
||||
cooldown_timer = _tree.create_timer(fire_delay)
|
||||
cooldown_timer.timeout.connect(on_cooldown_timeout)
|
||||
if current_amount >= burst_amount:
|
||||
reloading = true
|
||||
reload_timer = _tree.create_timer(reload_time)
|
||||
reload_timer = tree.create_timer(reload_time)
|
||||
reload_timer.timeout.connect(on_reload_timeout)
|
||||
|
||||
|
||||
|
@ -55,16 +41,3 @@ func on_reload_timeout() -> void:
|
|||
reloading = false
|
||||
current_amount = 0
|
||||
reload_timer = null
|
||||
|
||||
|
||||
## Invoked when cooldown has ended
|
||||
func on_cooldown_timeout() -> void:
|
||||
cooldown = false
|
||||
cooldown_timer = null
|
||||
|
||||
|
||||
## Checks if timer is unfinished and unbounds to avoid errors
|
||||
func check_unfinished_timer(timer : SceneTreeTimer, bounded_callable : Callable) -> void:
|
||||
if timer == null:
|
||||
return
|
||||
timer.timeout.disconnect(bounded_callable)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue