99 lines
2.4 KiB
C#
99 lines
2.4 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.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);
|
|
}
|
|
|
|
public void ResetCD(float cdTime)
|
|
{
|
|
_maxCd = cdTime;
|
|
_curCd = _maxCd;
|
|
}
|
|
|
|
}
|
|
}
|