34 lines
730 B
GDScript
34 lines
730 B
GDScript
extends AbstractReloader
|
|
|
|
|
|
@export var magazine_size : int
|
|
@export var reload_time : int
|
|
|
|
|
|
@onready var _bullets_in_magazine : int = magazine_size if magazine_size > 0 else -1
|
|
@onready var _reload_time_tenth : float = reload_time / 10.0
|
|
|
|
|
|
var _cooldown : float
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
if _cooldown > 0:
|
|
_cooldown -= delta
|
|
|
|
if _bullets_in_magazine == 0 and _cooldown <= 0:
|
|
_bullets_in_magazine = magazine_size
|
|
|
|
|
|
func can_shoot() -> bool:
|
|
return _bullets_in_magazine > 0
|
|
|
|
|
|
func shoot() -> void:
|
|
if _bullets_in_magazine > 0:
|
|
_bullets_in_magazine -= 1
|
|
|
|
if _bullets_in_magazine == 0:
|
|
var random_delay := random.randf_range(-_reload_time_tenth, _reload_time_tenth)
|
|
_cooldown = reload_time + random_delay
|