Added reloaders
This commit is contained in:
+10
-2
@@ -13,7 +13,15 @@ func _process(delta: float) -> void:
|
||||
$Ship.accelerate(input_direction, delta)
|
||||
|
||||
var weapons : Array = $Ship.weapons
|
||||
var weapon_actions := { 0: "shoot_weapon_1", 1: "shoot_weapon_2" }
|
||||
var weapon_actions := {
|
||||
0: ["shoot_weapon_1", "reload_weapon_1"],
|
||||
1: ["shoot_weapon_2", "reload_weapon_2"]
|
||||
}
|
||||
for index : int in weapon_actions:
|
||||
if Input.is_action_pressed(weapon_actions[index], true) and weapons.size() > index:
|
||||
if index >= weapons.size(): break
|
||||
|
||||
if Input.is_action_pressed(weapon_actions[index][0], true):
|
||||
$Ship.shoot(weapons[index])
|
||||
|
||||
if Input.is_action_pressed(weapon_actions[index][1], true):
|
||||
$Ship.reload(weapons[index])
|
||||
|
||||
@@ -72,3 +72,8 @@ func _get_new_speed(accel: float, decel: float, current_speed: float) -> float:
|
||||
func shoot(weapon: Node) -> void:
|
||||
if weapon in weapons:
|
||||
weapon.shoot()
|
||||
|
||||
|
||||
func reload(weapon: Node) -> void:
|
||||
if weapon in weapons:
|
||||
weapon.reload()
|
||||
|
||||
@@ -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,22 +1,32 @@
|
||||
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:
|
||||
if _cooldown <= 0:
|
||||
_bullets_in_magazine = magazine_size
|
||||
|
||||
|
||||
@@ -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)
|
||||
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
|
||||
|
||||
@@ -2,25 +2,35 @@ extends Node2D
|
||||
|
||||
|
||||
@export var damage : int
|
||||
@export var firerate : int
|
||||
@export var magazine_size : int
|
||||
@export var reload_time : int
|
||||
@export var explosion_size : int
|
||||
@export var bullet_velocity : int
|
||||
@export var bullet_acceleration : int
|
||||
@export var bullet_per_shot : int
|
||||
@export var sector_angle : int
|
||||
@export var distance : int
|
||||
@export var heat_per_shot : int
|
||||
@export var heat_capacity : int
|
||||
@export var cooling_down_rate : int
|
||||
@export var explosion_size : int
|
||||
@export var reloaders : Array[AbstractReloader]
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
#TEST
|
||||
firerate = 600
|
||||
magazine_size = 300
|
||||
reload_time = 2
|
||||
var firerate_reloader := preload("res://game/entities/weapons/reloaders/firerate_reloader.gd").new()
|
||||
firerate_reloader.firerate = 600
|
||||
reloaders.append(firerate_reloader)
|
||||
add_child(firerate_reloader)
|
||||
|
||||
var magazine_reloader := preload("res://game/entities/weapons/reloaders/magazine_reloader.gd").new()
|
||||
magazine_reloader.magazine_size = 5
|
||||
magazine_reloader.reload_time = 3
|
||||
reloaders.append(magazine_reloader)
|
||||
add_child(magazine_reloader)
|
||||
|
||||
#var energy_reloader := preload("res://game/entities/weapons/reloaders/energy_reloader.gd").new()
|
||||
#energy_reloader.heat_capacity = 1000
|
||||
#energy_reloader.heat_per_shot = 25
|
||||
#energy_reloader.cooling_down_rate = 1000
|
||||
#reloaders.append(energy_reloader)
|
||||
#add_child(energy_reloader)
|
||||
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -31,8 +41,18 @@ func _ready() -> void:
|
||||
|
||||
func shoot() -> void:
|
||||
if not _can_shoot(): return
|
||||
print("shoot")
|
||||
print("shot")
|
||||
for reloader in reloaders:
|
||||
reloader.shoot()
|
||||
|
||||
|
||||
func reload() -> void:
|
||||
for reloader in reloaders:
|
||||
reloader.reload()
|
||||
|
||||
|
||||
func _can_shoot() -> bool:
|
||||
for reloader in reloaders:
|
||||
if not reloader.can_shoot():
|
||||
return false
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user