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

100 lines
3.2 KiB
C#

using Gameplay.PlayerSkill.Logic;
using LTGame;
namespace Gameplay.PlayerSkill.State
{
public class PlayerSkillStateRelease : BasePlayerSkillState
{
private BasePlayerSkillLogic _logic;
public PlayerSkillStateRelease(PlayerSkillManager owner) : base(owner, EPlayerSkillState.Release)
{
}
protected override void _OnEnter(NBaseState exitState,
object param)
{
base._OnEnter(exitState, param);
owner.ResetCD(owner.readySkillConfig.CDTime);
_logic = null;
switch (owner.readySkillConfig.LogicActionId)
{
case EPlayerSkillLogicType.ForceRetreat:
_logic = new PlayerSkillLogic01();
break;
case EPlayerSkillLogicType.ForceRetreatAll:
_logic = new PlayerSkillLogic02();
break;
case EPlayerSkillLogicType.EmitBulletToCellIndex:
_logic = new PlayerSkillLogic03();
break;
case EPlayerSkillLogicType.EmitBulletToEnemyUnits:
_logic = new PlayerSkillLogic04();
break;
case EPlayerSkillLogicType.CreateSummonToCellIndex:
_logic = new PlayerSkillLogic05();
break;
case EPlayerSkillLogicType.ForceTargetUnit:
_logic = new PlayerSkillLogic06();
break;
case EPlayerSkillLogicType.SetUnitBackToReady:
_logic = new PlayerSkillLogic07();
break;
case EPlayerSkillLogicType.SendBulletToSelfVehicle:
_logic = new PlayerSkillLogic08();
break;
case EPlayerSkillLogicType.RandomReviveSelfDeadUnit:
_logic = new PlayerSkillLogic09();
break;
case EPlayerSkillLogicType.RecoverHpInPrepare:
_logic = new PlayerSkillLogic10();
break;
case EPlayerSkillLogicType.SplitMove:
_logic = new PlayerSkillLogic11();
break;
default:
DebugUtil.LogError("暂未实现的技能逻辑: " + owner.readySkillConfig.LogicActionId);
break;
}
if (_logic == null)
{
isFinished = true;
nextState = EPlayerSkillState.Idle;
return;
}
_logic.owner = owner;
_logic.Init();
}
protected override void _OnRunning()
{
base._OnRunning();
if (_logic == null) return;
_logic.LogicUpdate(deltaTime);
if (_logic.isFinished)
{
isFinished = true;
nextState = EPlayerSkillState.Idle;
}
}
protected override void _OnExit(NBaseState exitState,
object param)
{
base._OnExit(exitState, param);
if (_logic == null) return;
_logic.Dispose();
_logic = null;
}
}
}