39 lines
1.2 KiB
GDScript
39 lines
1.2 KiB
GDScript
extends HitscanTower
|
|
class_name GatlingTower
|
|
|
|
var time_since_firing_started := 0.0
|
|
var time_to_reach_max_speed := 0.0
|
|
var max_speed_multiplier := 0.0
|
|
var current_time_between_shots := 0.0
|
|
var final_time_between_shots := 0.0
|
|
|
|
|
|
func _ready() -> void:
|
|
super._ready()
|
|
time_to_reach_max_speed = stats.get_attribute("Speed Time")
|
|
max_speed_multiplier = stats.get_attribute("Speed Multiplier")
|
|
final_time_between_shots = time_between_shots / max_speed_multiplier
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
if time_since_firing < current_time_between_shots:
|
|
time_since_firing += delta
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
if !targeted_enemy:
|
|
acquire_target()
|
|
else:
|
|
if !targeted_enemy.alive or global_position.distance_to(targeted_enemy.global_position) > target_range:
|
|
targeted_enemy = null
|
|
time_since_firing_started = 0.0
|
|
current_time_between_shots = time_between_shots
|
|
if targeted_enemy:
|
|
aim()
|
|
time_since_firing_started += delta
|
|
var progress = clamp(time_since_firing_started / time_to_reach_max_speed, 0, 1.0)
|
|
current_time_between_shots = lerpf(time_between_shots, final_time_between_shots, progress)
|
|
if time_since_firing >= current_time_between_shots:
|
|
time_since_firing -= current_time_between_shots
|
|
shoot()
|