NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Character/Character.State.cs

134 lines
3.9 KiB
C#
Raw Normal View History

2024-03-20 18:13:34 +08:00
using Gameplay.Skill;
2023-12-13 16:20:41 +08:00
using Gameplay.Unit;
2023-08-22 19:08:45 +08:00
namespace Gameplay.Character
{
2023-10-19 15:00:19 +08:00
using Level;
2023-08-22 19:08:45 +08:00
using LTGame;
public partial class Character
{
private NStateMachine<BaseCharacterState> _downFSM;
private NStateMachine<BaseCharacterState> _upFSM;
private NStateMachine<BaseCharacterState> _fullFSM;
// private List<GameUnit> _cacheEnemyList = new List<GameUnit>();
public NStateMachine<BaseCharacterState> downFSM
{
get => _downFSM;
}
public NStateMachine<BaseCharacterState> upFSM
{
get => _upFSM;
}
public NStateMachine<BaseCharacterState> fullFSM
{
get => _fullFSM;
}
private void _InitFsm()
{
_downFSM = new NStateMachine<BaseCharacterState>();
_downFSM.Add(new DownStateIdle(this));
_downFSM.Add(new DownStateMove(this));
_downFSM.Add(new DownStateEmpty(this));
_upFSM = new NStateMachine<BaseCharacterState>();
_upFSM.Add(new UpStateIdle(this));
2024-11-08 14:46:04 +08:00
_upFSM.Add(new UpStateRaiseWeapon(this));
2023-08-22 19:08:45 +08:00
_upFSM.Add(new UpStateNormalShoot(this));
_upFSM.Add(new UpStateReload(this));
_upFSM.Add(new UpStateEmpty(this));
_upFSM.Add(new UpStateAttackEnd(this));
2023-08-22 19:08:45 +08:00
_fullFSM = new NStateMachine<BaseCharacterState>();
_fullFSM.Add(new FullStateEmpty(this));
_fullFSM.Add(new FullStateDead(this));
_fullFSM.Add(new FullStateReady(this));
_fullFSM.Add(new FullStateSkill(this));
_fullFSM.Add(new FullStateWaitRemove(this));
_fullFSM.Add(new FullStateRetreat(this));
_fullFSM.Add(new FullStateFadeOut(this));
_fullFSM.Add(new FullStateOnVehicle(this));
_fullFSM.Add(new FullStateUpVehicle(this));
2023-10-19 15:00:19 +08:00
_fullFSM.Add(new FullStateDeadOnVehicle(this));
_fullFSM.Add(new FullStateStun(this));
2024-11-25 18:27:04 +08:00
_fullFSM.Add(new FullStateEvacuate(this));
2023-08-22 19:08:45 +08:00
_fullFSM.ChangeState(EFullState.Ready);
}
public void Start()
{
_downFSM.ChangeState(EDownState.Idle);
_upFSM.ChangeState(EUpState.Idle);
}
public void ResetToPrepare()
{
_fullFSM.ChangeState(EFullState.Ready);
statusData.Reset();
controlData.Reset();
runtimeData.ResetToPrepare();
}
2024-11-25 18:27:04 +08:00
protected override void _OnEvacuateFromFight()
{
base._OnEvacuateFromFight();
_fullFSM.SetForceChangeState(EFullState.Evacuate);
}
2023-12-14 14:42:27 +08:00
protected override void _OnLogicUpdate(float dt)
2023-08-22 19:08:45 +08:00
{
if (_fullFSM == null) return;
if (SkillManager.instance.needSkillPaused && SkillManager.instance.inSkillingUnit != this)
2023-08-22 19:08:45 +08:00
{
return;
}
2023-11-16 15:40:50 +08:00
// 角色才更新这个
delayMoraleDamage.LogicUpdate(dt);
2023-10-19 15:00:19 +08:00
2023-08-22 19:08:45 +08:00
runtimeData.LogicUpdate(dt);
_fullFSM.LogicUpdate(dt);
_downFSM.LogicUpdate(dt);
_upFSM.LogicUpdate(dt);
_ViewUpdate(dt);
}
2024-03-12 19:44:05 +08:00
protected override void _UpdateTargets()
2023-08-22 19:08:45 +08:00
{
2024-03-12 19:44:05 +08:00
base._UpdateTargets();
2024-09-09 19:42:22 +08:00
_CommonUpdateTargets();
2023-08-22 19:08:45 +08:00
}
private void _ViewUpdate(float dt)
{
if (Node?.GameObject == null) return;
// 更新trans
if (transData.isTransChanged)
{
Node.GameObject.transform.SetPositionAndRotation(transData.pos, transData.rot);
}
transData.Reset();
// 更新动画
if (cAnim != null)
{
cAnim.ViewUpdate(dt);
}
// 更新武器
if (weapon != null)
{
weapon.ViewUpdate(dt);
}
}
}
2023-10-19 15:00:19 +08:00
}