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

102 lines
2.6 KiB
C#

using cfg.SkillCfg;
using Framework;
using Gameplay.Character;
using Gameplay.PlayerSkill.State;
using Gameplay.PlayerSkill.Unit;
using LTGame;
using UnityEngine;
namespace Gameplay.PlayerSkill
{
public class PlayerSkillManager
{
private NStateMachine<BasePlayerSkillState> _fsm;
public int readySkillId { get; private set; }
public DataPlayerSkill readySkillConfig { get; private set; }
public int selectedCellIndex;
public FakePlayerUnit playerUnit;
private float _maxCd;
private float _curCd;
public bool isInCD
{
get
{
return _curCd > 0;
}
}
public void Init()
{
// TODO: 这里临时用己方的troopId
var fakeId = GUIDManager.GenGuid();
playerUnit = new FakePlayerUnit(fakeId, ETroopsId.Self);
_InitFsm();
}
public float ReadParamFloat(int index)
{
if (readySkillConfig.FloatParams.Count <= index)
{
DebugUtil.LogError("技能参数不足: " + readySkillConfig.ID + " " + index);
return 0;
}
return readySkillConfig.FloatParams[index];
}
public int ReadParamInt(int index)
{
var floatVal = ReadParamFloat(index);
return Mathf.RoundToInt(floatVal);
}
private void _InitFsm()
{
_fsm = new NStateMachine<BasePlayerSkillState>();
_fsm.Add(new PlayerSkillStateIdle(this));
_fsm.Add(new PlayerSkillStateChoosePos(this));
_fsm.Add(new PlayerSkillStateRelease(this));
_fsm.Add(new PlayerSkillShowGlobalEffect(this));
_fsm.Add(new PlayerSkillPreNoEffect(this));
_fsm.ChangeState(EPlayerSkillState.Idle);
}
public void LogicUpdate(float dt)
{
_curCd -= dt;
_fsm.LogicUpdate(dt);
}
public void Dispose()
{
}
public float GetCDProgress(int id)
{
if (_curCd <= 0) return 0;
return _curCd / _maxCd;
}
public void ReadySkill(int skillId)
{
readySkillId = skillId;
readySkillConfig = TableManager.Instance.Tables.PlayerSkillConfig.Get(skillId);
DebugUtil.LogG("[指挥官技能] 准备技能: " + readySkillConfig.ID + " " + readySkillConfig.NameLocal);
}
public void ResetCD(float cdTime)
{
_maxCd = cdTime;
_curCd = _maxCd;
}
}
}