using System.Collections.Generic; using Cysharp.Threading.Tasks; using Gameplay.Unit; 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 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; DebugUtil.Log("角色:{0} 增加技能:{1}", owner.GetID(), configData.Name); if (configData.SkillType == cfg.SkillCfg.ESkillType.Positive) { 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); } } } }