Added reloaders

This commit is contained in:
2025-10-24 00:49:24 +03:00
parent f8d0edc5f7
commit 29d0cf59af
8 changed files with 167 additions and 30 deletions
@@ -3,7 +3,7 @@ class_name AbstractReloader
extends Node
var random := RandomNumberGenerator.new()
var _random := RandomNumberGenerator.new()
@abstract
@@ -12,3 +12,7 @@ func can_shoot() -> bool
@abstract
func shoot() -> void
@abstract
func reload() -> void
@@ -0,0 +1,61 @@
extends AbstractReloader
@export var heat_per_shot : int:
set(value):
heat_per_shot = value
_calculate_critical_heat()
@export var heat_capacity : int:
set(value):
heat_capacity = value
_calculate_critical_heat()
@export var cooling_down_rate : int:
set(value):
cooling_down_rate = value
_calculate_cool()
var _cool_per_sec : float
var _cool_per_sec_tenth : float
var _heat : float
var _critical_heat : int
func _ready() -> void:
_calculate_critical_heat()
_calculate_cool()
func _process(delta: float) -> void:
if _heat > 0:
_heat -= _cool_per_sec * delta
if _heat < 0:
_heat = 0
func can_shoot() -> bool:
return _heat <= _critical_heat
func shoot() -> void:
var random_heat := _random.randf_range(-_cool_per_sec_tenth, _cool_per_sec_tenth)
_heat += heat_per_shot + random_heat
func reload() -> void:
pass
func _calculate_critical_heat() -> void:
_critical_heat = heat_capacity - heat_per_shot
func _calculate_cool() -> void:
_cool_per_sec = cooling_down_rate / 60.0
_cool_per_sec_tenth = _cool_per_sec / 10
@@ -0,0 +1 @@
uid://dxk56xdihfw4m
@@ -1,16 +1,21 @@
extends AbstractReloader
@export var firerate : int
@onready var _delay : float = 60.0 / firerate
@onready var _delay_tenth : float = _delay / 10
@export var firerate : int:
set(value):
firerate = value
_calculate_delay()
var _delay : float
var _delay_tenth : float
var _cooldown : float
func _ready() -> void:
_calculate_delay()
func _process(delta: float) -> void:
if _cooldown > 0:
_cooldown -= delta
@@ -21,5 +26,14 @@ func can_shoot() -> bool:
func shoot() -> void:
var random_delay := random.randf_range(-_delay_tenth, _delay_tenth)
var random_delay := _random.randf_range(-_delay_tenth, _delay_tenth)
_cooldown = _delay + random_delay
func reload() -> void:
pass
func _calculate_delay() -> void:
_delay = 60.0 / firerate
_delay_tenth = _delay / 10
@@ -1,23 +1,33 @@
extends AbstractReloader
@export var magazine_size : int
@export var reload_time : int
@export var magazine_size : int:
set(value):
magazine_size = value
_calculate_bullets_in_magazine()
@onready var _bullets_in_magazine : int = magazine_size if magazine_size > 0 else -1
@onready var _reload_time_tenth : float = reload_time / 10.0
@export var reload_time : int:
set(value):
reload_time = value
_calculate_reload_time_tenth()
var _bullets_in_magazine : int
var _reload_time_tenth : float
var _cooldown : float
func _ready() -> void:
_calculate_bullets_in_magazine()
_calculate_reload_time_tenth()
func _process(delta: float) -> void:
if _cooldown > 0:
_cooldown -= delta
if _bullets_in_magazine == 0 and _cooldown <= 0:
_bullets_in_magazine = magazine_size
if _cooldown <= 0:
_bullets_in_magazine = magazine_size
func can_shoot() -> bool:
@@ -29,5 +39,19 @@ func shoot() -> void:
_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
reload()
func reload() -> void:
if _cooldown > 0 or _bullets_in_magazine == magazine_size: return
print("reload")
var random_delay := _random.randf_range(-_reload_time_tenth, _reload_time_tenth)
_cooldown = reload_time + random_delay
func _calculate_bullets_in_magazine() -> void:
_bullets_in_magazine = magazine_size
func _calculate_reload_time_tenth() -> void:
_reload_time_tenth = reload_time / 10.0