NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/UnitSkillManager.cs

78 lines
2.2 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks;
2023-10-19 15:00:19 +08:00
using Gameplay.Common;
2023-08-22 19:08:45 +08:00
namespace Gameplay.Skill
{
using Character;
using Framework;
using UnityEngine;
public class UnitSkillManager
{
2023-10-19 15:00:19 +08:00
public readonly GameUnit owner;
public readonly List<SkillHandle> handles;
private readonly Dictionary<int, SkillHandle> _handleDict;
2023-08-22 19:08:45 +08:00
public SkillHandle positiveSkill;
2023-10-19 15:00:19 +08:00
public UnitSkillManager(GameUnit owner)
2023-08-22 19:08:45 +08:00
{
this.owner = owner;
handles = new List<SkillHandle>();
_handleDict = new Dictionary<int, SkillHandle>();
}
public async UniTask<bool> AddSkill(int skillId)
{
2023-10-19 15:00:19 +08:00
var configData = SkillManager.GetSkillConfigById(skillId);
2023-08-22 19:08:45 +08:00
if (configData == null)
{
owner.LogError("无效的技能id:" + skillId);
return false;
}
var logicData = await SkillManager.instance.GetSkillLogicById(configData.LogicId);
if (logicData == null)
{
2023-10-19 15:00:19 +08:00
DebugUtil.LogError("无效的logicId:{0}", configData.LogicId);
2023-08-22 19:08:45 +08:00
}
var skillHandle = new SkillHandle(owner, configData);
skillHandle.runtimeData.logicData = logicData;
2023-10-19 15:00:19 +08:00
DebugUtil.Log("角色:{0} 增加技能:{1}", owner.GetID(), configData.Name);
2023-08-22 19:08:45 +08:00
if (configData.SkillType == cfg.SkillCfg.ESkillType.Positive)
{
positiveSkill = skillHandle;
}
handles.Add(skillHandle);
_handleDict.Add(configData.ID, skillHandle);
return true;
}
2023-11-15 16:09:10 +08:00
public void AddPassiveBuffIds(List<int> buffIds)
{
if (buffIds == null || buffIds.Count == 0) return;
for (var i = 0; i < buffIds.Count; ++i)
{
var buffId = buffIds[i];
owner.buffManager.AddBuffById(buffId);
}
}
2023-08-22 19:08:45 +08:00
public void LogicUpdate(float dt)
{
for (var i = 0; i < handles.Count; ++i)
{
var handle = handles[i];
handle.LogicUpdate(dt);
}
}
}
}