Added more weapons
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
@abstract
|
||||
extends Resource
|
||||
class_name AbstractReloader
|
||||
|
||||
|
||||
var _random := RandomNumberGenerator.new()
|
||||
|
||||
|
||||
@abstract
|
||||
func process(delta: float) -> void
|
||||
|
||||
|
||||
@abstract
|
||||
func can_shoot() -> bool
|
||||
|
||||
|
||||
@abstract
|
||||
func shoot() -> void
|
||||
|
||||
|
||||
@abstract
|
||||
func reload() -> void
|
||||
|
||||
|
||||
@abstract
|
||||
func get_process_percent() -> int
|
||||
@@ -0,0 +1 @@
|
||||
uid://ccpriilfr3kme
|
||||
@@ -0,0 +1,66 @@
|
||||
extends AbstractReloader
|
||||
class_name EnergyReloader
|
||||
|
||||
|
||||
@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 get_process_percent() -> int:
|
||||
return 100 - int(_heat * 100 / heat_capacity)
|
||||
|
||||
|
||||
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
|
||||
@@ -0,0 +1,44 @@
|
||||
extends AbstractReloader
|
||||
class_name FirerateReloader
|
||||
|
||||
|
||||
@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
|
||||
|
||||
|
||||
func can_shoot() -> bool:
|
||||
return _cooldown <= 0
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
var random_delay := _random.randf_range(-_delay_tenth, _delay_tenth)
|
||||
_cooldown = _delay + random_delay
|
||||
|
||||
|
||||
func reload() -> void:
|
||||
pass
|
||||
|
||||
|
||||
func get_process_percent() -> int:
|
||||
return 100 - int(_cooldown * 100 / _delay)
|
||||
|
||||
|
||||
func _calculate_delay() -> void:
|
||||
_delay = 60.0 / firerate
|
||||
_delay_tenth = _delay / 10
|
||||
@@ -0,0 +1 @@
|
||||
uid://b255rb32vc6co
|
||||
@@ -0,0 +1,64 @@
|
||||
extends AbstractReloader
|
||||
class_name GatlingReloader
|
||||
|
||||
|
||||
@export var firerate : int:
|
||||
set(value):
|
||||
firerate = value
|
||||
_calculate_delay()
|
||||
|
||||
@export var spin_out_time : int:
|
||||
set(value):
|
||||
spin_out_time = value
|
||||
_calculate_delay()
|
||||
|
||||
|
||||
const INITIAL_DELAY = 1.0
|
||||
|
||||
|
||||
var _target_delay : float
|
||||
var _current_delay : float = INITIAL_DELAY
|
||||
var _delay_decrement : float
|
||||
var _cooldown : float
|
||||
var _last_delta : float
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_calculate_delay()
|
||||
|
||||
|
||||
func process(delta: float) -> void:
|
||||
if _cooldown > 0:
|
||||
_cooldown -= delta
|
||||
|
||||
if _current_delay < INITIAL_DELAY:
|
||||
_decrease_delay(_delay_decrement * -delta)
|
||||
|
||||
_last_delta = delta
|
||||
|
||||
|
||||
func can_shoot() -> bool:
|
||||
_decrease_delay(_delay_decrement * 2 * _last_delta)
|
||||
return _cooldown <= 0
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
_cooldown = _current_delay
|
||||
|
||||
|
||||
func reload() -> void:
|
||||
pass
|
||||
|
||||
|
||||
func get_process_percent() -> int:
|
||||
return 100 - int(_cooldown * 100 / _current_delay)
|
||||
|
||||
|
||||
func _calculate_delay() -> void:
|
||||
_target_delay = 60.0 / firerate
|
||||
_delay_decrement = (INITIAL_DELAY - _target_delay)/spin_out_time
|
||||
|
||||
|
||||
func _decrease_delay(delay_decrement: float) -> void:
|
||||
_current_delay = _current_delay - delay_decrement
|
||||
_current_delay = clampf(_current_delay, _target_delay, INITIAL_DELAY)
|
||||
@@ -0,0 +1 @@
|
||||
uid://oslebeau3f4b
|
||||
@@ -0,0 +1,62 @@
|
||||
extends AbstractReloader
|
||||
class_name MagazineReloader
|
||||
|
||||
|
||||
@export var magazine_size : int:
|
||||
set(value):
|
||||
magazine_size = value
|
||||
_calculate_bullets_in_magazine()
|
||||
|
||||
|
||||
@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 _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 := _random.randf_range(-_reload_time_tenth, _reload_time_tenth)
|
||||
_countdown = reload_time + random_delay
|
||||
print("reload")
|
||||
|
||||
|
||||
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
|
||||
@@ -0,0 +1 @@
|
||||
uid://d2gfhnlbqxsoq
|
||||
Reference in New Issue
Block a user