62 lines
1.2 KiB
GDScript
62 lines
1.2 KiB
GDScript
extends AbstractReloader
|
|
class_name MagazineReloader
|
|
|
|
|
|
@export_range(1, 500) var magazine_size : int = 1:
|
|
set(value):
|
|
magazine_size = value
|
|
_calculate_bullets_in_magazine()
|
|
|
|
|
|
@export_range(1, 60) var reload_time : int = 1:
|
|
set(value):
|
|
reload_time = value
|
|
_calculate_reload_time_tenth()
|
|
|
|
|
|
var _bullets_in_magazine : int
|
|
var _reload_time_tenth : float
|
|
var _countdown : float
|
|
|
|
|
|
func _ready() -> void:
|
|
_calculate_bullets_in_magazine()
|
|
_calculate_reload_time_tenth()
|
|
|
|
|
|
func process(delta: float) -> void:
|
|
if _countdown > 0:
|
|
_countdown -= delta
|
|
if _countdown <= 0:
|
|
_bullets_in_magazine = magazine_size
|
|
|
|
|
|
func can_shoot() -> bool:
|
|
return _countdown <= 0
|
|
|
|
|
|
func shoot() -> void:
|
|
if _bullets_in_magazine > 0:
|
|
_bullets_in_magazine -= 1
|
|
|
|
if _bullets_in_magazine == 0:
|
|
reload()
|
|
|
|
|
|
func reload() -> void:
|
|
if _countdown > 0 or _bullets_in_magazine == magazine_size: return
|
|
var random_delay := randf_range(-_reload_time_tenth, _reload_time_tenth)
|
|
_countdown = reload_time + random_delay
|
|
|
|
|
|
func get_process_percent() -> int:
|
|
return 100 - int(_countdown * 100 / reload_time)
|
|
|
|
|
|
func _calculate_bullets_in_magazine() -> void:
|
|
_bullets_in_magazine = magazine_size
|
|
|
|
|
|
func _calculate_reload_time_tenth() -> void:
|
|
_reload_time_tenth = reload_time / 10.0
|