97 lines
2.8 KiB
C#
97 lines
2.8 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;
|
|
public Dictionary<int, SkillHandle> handleDict => _handleDict;
|
|
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 TriggerNormalAttack()
|
|
{
|
|
if (positiveSkill == null) return;
|
|
positiveSkill.TriggerNormalAttack();
|
|
}
|
|
|
|
public void TriggerBeAttack()
|
|
{
|
|
if (positiveSkill == null) return;
|
|
positiveSkill.TriggerBeAttack();
|
|
}
|
|
|
|
public void ReduceSkillCd(float reduceTime)
|
|
{
|
|
if (positiveSkill == null) return;
|
|
positiveSkill.ReduceSkillCd(reduceTime);
|
|
}
|
|
|
|
public void ReduceSkillCdPercent(float percent)
|
|
{
|
|
if (positiveSkill == null) return;
|
|
positiveSkill.ReduceSkillCdPercent(percent);
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|