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

85 lines
2.5 KiB
C#

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<SkillHandle> handles;
private readonly Dictionary<int, SkillHandle> _handleDict;
public SkillHandle positiveSkill;
public UnitSkillManager(GameUnit owner)
{
this.owner = owner;
handles = new List<SkillHandle>();
_handleDict = new Dictionary<int, SkillHandle>();
}
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<bool> 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<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);
}
}
public void LogicUpdate(float dt)
{
for (var i = 0; i < handles.Count; ++i)
{
var handle = handles[i];
handle.LogicUpdate(dt);
}
}
}
}