Added AbstractReloader
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
@abstract
|
||||
class_name AbstractReloader
|
||||
extends Node
|
||||
|
||||
|
||||
var random := RandomNumberGenerator.new()
|
||||
|
||||
|
||||
@abstract
|
||||
func can_shoot() -> bool
|
||||
|
||||
|
||||
@abstract
|
||||
func shoot() -> void
|
||||
@@ -0,0 +1 @@
|
||||
uid://ccpriilfr3kme
|
||||
@@ -0,0 +1,25 @@
|
||||
extends AbstractReloader
|
||||
|
||||
|
||||
@export var firerate : int
|
||||
|
||||
|
||||
@onready var _delay : float = 60.0 / firerate
|
||||
@onready var _delay_tenth : float = _delay / 10
|
||||
|
||||
|
||||
var _cooldown : float
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if _cooldown > 0:
|
||||
_cooldown -= delta
|
||||
|
||||
|
||||
func can_shoot() -> bool:
|
||||
return _cooldown <= 0
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
var random_delay := random.randf_range(-_delay_tenth, _delay_tenth)
|
||||
_cooldown = _delay + random_delay
|
||||
@@ -0,0 +1 @@
|
||||
uid://b255rb32vc6co
|
||||
@@ -0,0 +1,33 @@
|
||||
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
|
||||
@@ -0,0 +1 @@
|
||||
uid://d2gfhnlbqxsoq
|
||||
Reference in New Issue
Block a user