SupaLidlGame/State/Weapon/RangedChargeState.cs

64 lines
1.4 KiB
C#
Raw Permalink 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;
}
2024-10-18 15:01:54 -07:00
FireState.VelocityModifier = (float)(1 - progress) *
FireState.InitialVelocityModifier;
2023-09-10 17:08:14 -07:00
return FireState;
}
}