using Cirno.Scripts.Components.Actors; using Godot; namespace Cirno.Scripts.Components.FSM._3DPlayer; public partial class PlayerWeaponModule3D : ModuleBase { [Export] public PlayerWeaponProvider3D WeaponProvider { get; private set; } [Export] public InputProvider InputProvider { get; private set; } [Export] public IsoPlayerStorageModule Storage { get; private set; } private IStateMachine _stateMachine; private CharacterBody3D MainObject => _stateMachine.MainObject; public override void EnterState(PlayerState state) { } public override void ExitState(PlayerState state) { } public override void Init(IStateMachine machine) { _stateMachine = machine; WeaponProvider.Init(MainObject); } public override void Process(double delta) { WeaponProvider.Update(delta); HandleShoot(); HandleWeaponSwitch(); } public override void PhysicsProcess(double delta) { } private void HandleShoot() { if (InputProvider.GetReloadJustPressed()) { WeaponProvider.Reload(); return; } if (!InputProvider.GetShootPressed()) return; WeaponProvider.Shoot(Storage.AimingDirection); } private void HandleWeaponSwitch() { if (InputProvider.GetWeaponNextJustPressed()) { WeaponProvider.NextWeapon(); } else if (InputProvider.GetWeaponPreviousJustPressed()) { WeaponProvider.PreviousWeapon(); } } }