79 lines
2.3 KiB
C#
79 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Cysharp.Threading.Tasks;
|
|
using Gameplay.Common;
|
|
using Gameplay.Unit;
|
|
|
|
namespace Gameplay.Skill
|
|
{
|
|
using Character;
|
|
using Framework;
|
|
using UnityEngine;
|
|
|
|
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 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)
|
|
{
|
|
DebugUtil.LogError("无效的logicId:{0}", configData.LogicId);
|
|
}
|
|
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<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);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|