using System.Collections.Generic; using Cysharp.Threading.Tasks; using Gameplay.Unit; using Gameplay.Unit.Data; namespace Gameplay.Skill { public class UnitSkillManager { public readonly GameUnit owner; public readonly List handles; private readonly Dictionary _handleDict; public SkillHandle positiveSkill; public UnitSkillManager(GameUnit owner) { this.owner = owner; handles = new List(); _handleDict = new Dictionary(); } public void ReduceSkillCd(float reduceTime) { if (positiveSkill == null) return; positiveSkill.ReduceSkillCd(reduceTime); } public void ReduceSkillCdPercent(float percent) { if (positiveSkill == null) return; var reduceTime = positiveSkill.runtimeData.maxCdTime * percent; positiveSkill.ReduceSkillCd(reduceTime); } public async UniTask AddSkill(int skillId) { var configData = SkillManager.GetSkillConfigById(skillId); if (configData == null) { owner.LogError("无效的技能id:" + skillId); return false; } var logicData = await SkillManager.instance.GetSkillLogicById(configData.LogicId); if (logicData == null) { return false; } var skillHandle = new SkillHandle(owner, configData); skillHandle.runtimeData.logicData = logicData; if (DebugUtil.LogEnable) { DebugUtil.LogG($"为{owner.GetDescString()} 增加技能:{configData.NameRead} 技能id:{configData.ID}"); } positiveSkill = skillHandle; handles.Add(skillHandle); _handleDict.Add(configData.ID, skillHandle); return true; } public void AddPassiveBuffIds(List buffIds) { if (buffIds == null || buffIds.Count == 0) return; for (var i = 0; i < buffIds.Count; ++i) { var buffId = buffIds[i]; owner.buffManager.AddBuffById(buffId); } } public void LogicUpdate(float dt) { for (var i = 0; i < handles.Count; ++i) { var handle = handles[i]; handle.LogicUpdate(dt); } } } }