class_name GatlingWeapon extends HitscanWeapon var time_since_firing_started: float = 0.0 var time_to_reach_max_speed: float = 0.0 var max_speed_multiplier: float = 0.0 var current_time_between_shots: float = 0.0 var final_time_between_shots: float = 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: super._process(delta) if trigger_held: time_since_firing_started += delta var progress: float = clamp(time_since_firing_started / time_to_reach_max_speed, 0.0, 1.0) current_time_between_shots = lerpf(time_between_shots, final_time_between_shots, progress) if current_energy < energy_cost: time_since_firing_started = 0.0 current_time_between_shots = time_between_shots func _physics_process(_delta: float) -> void: if trigger_held and current_energy >= energy_cost and time_since_firing >= current_time_between_shots: time_since_firing -= current_time_between_shots current_energy -= energy_cost energy_changed.emit(current_energy) shoot() networked_shoot.rpc() func release_trigger() -> void: super.release_trigger() time_since_firing_started = 0.0 current_time_between_shots = time_between_shots