52 lines
1.3 KiB
C#
52 lines
1.3 KiB
C#
using SepCore.Definition;
|
|
|
|
namespace SepCore.Entity
|
|
{
|
|
/// <summary>
|
|
/// 长枪的瞄准状态。
|
|
/// </summary>
|
|
public sealed class WeaponLanceAimState : WeaponStateBase
|
|
{
|
|
private WeaponLance _weapon;
|
|
|
|
public override WeaponStateType State => WeaponStateType.Aim;
|
|
|
|
public override void OnInit(WeaponBase weapon) => _weapon = (WeaponLance)weapon;
|
|
|
|
public override void OnEnter()
|
|
{
|
|
if (_weapon.CanAttack)
|
|
{
|
|
_weapon.TransitionTo(WeaponStateType.Attack);
|
|
}
|
|
}
|
|
|
|
public override void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
|
{
|
|
_weapon.Check();
|
|
_weapon.RotateToTarget(elapseSeconds);
|
|
|
|
if (_weapon.Target == null || !_weapon.Target.Available)
|
|
{
|
|
_weapon.TransitionTo(WeaponStateType.Idle);
|
|
return;
|
|
}
|
|
|
|
if (!_weapon.IsInRange(_weapon.Target, _weapon.SqrRange))
|
|
{
|
|
_weapon.TransitionTo(WeaponStateType.Seek);
|
|
return;
|
|
}
|
|
|
|
if (_weapon.CanAttack)
|
|
{
|
|
_weapon.TransitionTo(WeaponStateType.Attack);
|
|
}
|
|
}
|
|
|
|
public override void OnLeave()
|
|
{
|
|
}
|
|
}
|
|
}
|