using UnityEngine;
|
using System.Collections.Generic;
|
|
public class SkillManager
|
{
|
private Dictionary<int, Skill> m_SkillDict;
|
private List<int> m_SkillList;
|
private List<int> m_PassiveSkill;
|
|
private uint m_OwnerID;
|
|
private Skill m_CurrentSkill;
|
public Skill CurCastSkill
|
{
|
get
|
{
|
return m_CurrentSkill;
|
}
|
private set
|
{
|
m_CurrentSkill = value;
|
}
|
}
|
|
private bool m_DoingPrepareSkill = false;
|
public bool DoingPrepareSkill
|
{
|
get
|
{
|
return m_DoingPrepareSkill;
|
}
|
set
|
{
|
m_DoingPrepareSkill = value;
|
}
|
}
|
|
public SkillManager(uint sid)
|
{
|
m_OwnerID = sid;
|
m_SkillDict = new Dictionary<int, Skill>();
|
m_SkillList = new List<int>();
|
m_PassiveSkill = new List<int>();
|
}
|
|
public bool TryGetPassiveEffectValue(int id, out SkillHelper.EffectValue effectValue,
|
out SkillHelper.SkillInfo skill)
|
{
|
SkillHelper.SkillInfo _skill;
|
foreach (var _id in m_PassiveSkill)
|
{
|
_skill = SkillHelper.Instance.Get(_id);
|
if (_skill.effectValue.TryGetValue(id, out effectValue))
|
{
|
skill = _skill;
|
return true;
|
}
|
}
|
effectValue = default(SkillHelper.EffectValue);
|
skill = null;
|
return false;
|
}
|
|
public void ResetAllCD()
|
{
|
foreach (var _skill in m_SkillDict.Values)
|
{
|
if (_skill != null
|
&& _skill.skillInfo != null
|
&& _skill.skillInfo.config != null)
|
{
|
if (Skill.RefreshCD != null)
|
{
|
_skill.cd = 0;
|
Skill.RefreshCD(_skill.id, 0, _skill.skillInfo.config.CoolDownTime * Constants.F_GAMMA);
|
}
|
}
|
}
|
}
|
|
public Skill Get(int id, int ElementID = 0)
|
{
|
if (id <= 0)
|
{
|
Debug.LogWarningFormat("传入了非法的技能id...[ {0} ]", id);
|
return null;
|
}
|
|
if (!m_SkillDict.ContainsKey(id))
|
{
|
Skill _skill = new Skill(m_OwnerID, id, ElementID);
|
m_SkillDict[id] = _skill;
|
m_SkillList.Add(id);
|
if (_skill.skillInfo.config.FuncType == (int)E_SkillFuncType.FaBaoPassiveSkills)
|
{
|
if (!m_PassiveSkill.Contains(id))
|
{
|
m_PassiveSkill.Add(id);
|
}
|
}
|
}
|
else
|
{
|
if (ElementID != 0)
|
m_SkillDict[id].SkillElementID = ElementID;
|
}
|
|
return m_SkillDict[id];
|
}
|
|
/// <summary>
|
/// 释放给定id技能
|
/// </summary>
|
/// <param name="id">技能id</param>
|
/// <param name="force">是否强制,忽略cd</param>
|
public void CastSkill(uint userSID, int id, bool force = false)
|
{
|
CurCastSkill = Get(id);
|
|
if (!force)
|
{
|
if (!CurCastSkill.IsValid())
|
{
|
return;
|
}
|
}
|
|
CurCastSkill.SkillCompelete = false;
|
|
CurCastSkill.Cast(userSID);
|
|
CurCastSkill.hurtClientList.Clear();
|
CurCastSkill.hurtClntFightNpcList.Clear();
|
}
|
|
public void Update()
|
{
|
for (int i = 0; i < m_SkillList.Count; ++i)
|
{
|
if (m_SkillDict.ContainsKey(m_SkillList[i]) == false)
|
{
|
continue;
|
}
|
m_SkillDict[m_SkillList[i]].Update();
|
}
|
}
|
|
public void Clear()
|
{
|
Skill _skill = null;
|
GActorFight _owner = GAMgr.Instance.GetBySID(m_OwnerID) as GActorFight;
|
foreach (var _skillID in m_SkillList)
|
{
|
_skill = m_SkillDict[_skillID];
|
_skill.ClearSkillKillTargets();
|
}
|
}
|
}
|