SupaLidlGame/State/Weapon/RangedChargeState.cs

63 lines
1.3 KiB
C#
Raw Normal View History

2023-09-10 17:08:14 -07:00
using Godot;
using SupaLidlGame.Extensions;
namespace SupaLidlGame.State.Weapon;
public partial class RangedChargeState : WeaponState
{
[Export]
public Items.Weapons.Ranged Weapon { get; set; }
[Export]
public RangedFireState FireState { get; set; }
[Export]
public RangedIdleState IdleState { get; set; }
[Export]
public AnimationPlayer AnimationPlayer { get; set; }
[Export]
public string AnimationKey { get; set; }
private double _timeLeftToCharge = 0;
//private double _timeLeftToOvercharge = 0;
public override IState<WeaponState> Enter(IState<WeaponState> prev)
{
_timeLeftToCharge = Weapon.ChargeTime;
AnimationPlayer?.TryPlay(AnimationKey);
return null;
}
public override WeaponState Process(double delta)
{
if (_timeLeftToCharge > 0)
{
if ((_timeLeftToCharge -= delta) < 0)
{
_timeLeftToCharge = 0;
}
}
Weapon.UseDirection = Weapon.Character.Target;
return null;
}
public override WeaponState Deuse()
{
// fire
double progress = _timeLeftToCharge / Weapon.ChargeTime;
if (progress > 0.5)
{
return IdleState;
}
FireState.VelocityModifier = (float)(1 - progress);
return FireState;
}
}