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 _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(); _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); } public void ResetCD(float cdTime) { _maxCd = cdTime; _curCd = _maxCd; } } }