extends WeaponState @export var vertical_curve: Curve @export var horizontal_curve: Curve @export var emptyable: bool @export var damage: int @export var shoot_distance: float = 100 @export var fire_timer: Timer var bullets_shot: int = 0 func enter() -> void: fire() machine.animation_player.animation_finished.connect(on_animation_finished) func exit() -> void: bullets_shot = 0 machine.animation_player.animation_finished.disconnect(on_animation_finished) func on_animation_finished(animation): if animation == with_morphems("shoot"): transition.emit("Idle") func use_begin() -> void: if fire_timer.time_left > 0: return fire() func fire() -> void: if machine.ammo == 0 or fire_timer.time_left > 0: return machine.player.get_node("ShootAudio").multiplayer_play() machine.ammo -= 1 bullets_shot += 1 machine.animation_player.stop() machine.animation_player.play(with_morphems("shoot")) if is_multiplayer_authority(): Session.shoot(damage,shoot_distance) fire_timer.start() machine.player_camera.recoil(horizontal_curve.sample(bullets_shot),vertical_curve.sample(bullets_shot)) func with_morphems(animation): return machine.animation_prefix + ((animation+"_empty") if emptyable and machine.ammo == 0 else animation)