cirnogodot/Scripts/Components/FSM/3DPlayer/PlayerWeaponModule3D.cs
2025-06-17 11:57:59 +02:00

70 lines
No EOL
1.7 KiB
C#

using Cirno.Scripts.Components.Actors;
using Godot;
namespace Cirno.Scripts.Components.FSM._3DPlayer;
public partial class PlayerWeaponModule3D : ModuleBase<PlayerState, CharacterBody3D>
{
[Export] public PlayerWeaponProvider3D WeaponProvider { get; private set; }
[Export] public InputProvider InputProvider { get; private set; }
[Export] public IsoPlayerStorageModule Storage { get; private set; }
private IStateMachine<PlayerState, CharacterBody3D> _stateMachine;
private CharacterBody3D MainObject => _stateMachine.MainObject;
public override void EnterState(PlayerState state)
{
}
public override void ExitState(PlayerState state)
{
}
public override void Init(IStateMachine<PlayerState, CharacterBody3D> 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();
}
}
}