cirnogodot/Scripts/Components/FSM/3DPlayer/PlayerWeaponModule3D.cs

69 lines
No EOL
1.6 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; }
private IsoPlayerStorageModule Storage { get; set; }
public override void EnterState(PlayerState state)
{
}
public override void ExitState(PlayerState state)
{
}
public override void Init(IStateMachine<PlayerState, CharacterBody3D> machine)
{
base.Init(machine);
Storage ??= StateMachine.GetModule<IsoPlayerStorageModule>();
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())
{
WeaponProvider.Shoot(Storage.AimingDirection);
}
}
private void HandleWeaponSwitch()
{
if (InputProvider.GetWeaponNextJustPressed())
{
WeaponProvider.NextWeapon();
}
else if (InputProvider.GetWeaponPreviousJustPressed())
{
WeaponProvider.PreviousWeapon();
}
}
}