NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Summon/SummonManager.cs

128 lines
3.5 KiB
C#

using cfg.SummonCfg;
using Framework;
using Gameplay.Effect;
using Gameplay.Skill;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Gameplay.Common;
using PhxhSDK;
namespace Gameplay.Summon
{
public class SummonManager
{
private static SummonManager _instance;
public static SummonManager instance
{
get
{
return _instance;
}
}
public static SummonManager CreateInstance()
{
if (_instance != null)
{
return _instance;
}
_instance = new SummonManager();
return _instance;
}
private List<BaseSummon> _summonList;
public void Init()
{
_summonList = new List<BaseSummon>();
}
public DataSummon GetConfigById(int summonId)
{
return TableManager.Instance.Tables.SummonConfig.Get(summonId);
}
public BaseSummon CreateSummon(int summonId, int createCellIndex, SkillHandle skillHandle)
{
var configData = GetConfigById(summonId);
if (configData == null)
{
return null;
}
var guid = GUIDManager.GenGuid();
BaseSummon createSummon = null;
switch (configData.LogicId)
{
case ESummonLogicId.TENT:
createSummon = new SummonTent(configData, guid, skillHandle);
break;
case ESummonLogicId.MINE:
createSummon = new SummonMine(configData, guid, skillHandle);
break;
}
if (createSummon == null)
{
DebugUtil.LogError("暂未处理的召唤物logicId:{0}", configData.LogicId);
return null;
}
createSummon.Init(createCellIndex, 0);
createSummon.Create();
_summonList.Add(createSummon);
EventManager.Instance.Send(EventManager.EventName.INFIGHT_UNIT_READY, createSummon);
return createSummon;
}
public void LogicUpdate(float dt)
{
if (SkillManager.instance.needSkillPaused)
{
return;
}
for (var i = 0; i < _summonList.Count; ++i)
{
var summon = _summonList[i];
summon.LogicUpdate(dt);
if (summon.needRemove)
{
EventManager.Instance.Send(EventManager.EventName.INFIGHT_UNIT_REMOVE, summon);
// 播放销毁特效
if (summon.configData.DestroyEffectId > 0)
{
EffectManager.instance.PlayEffectById(summon.configData.DestroyEffectId,
summon.Node.GameObject.transform.position,
summon.Node.GameObject.transform.rotation);
}
// 播放销毁音效
if (summon.configData.DestroyAudioId > 0)
{
_ = AudioManager.Instance.PlayAudio(summon.configData.DestroyAudioId, summon.Node.GameObject.transform.position);
}
summon.Dispose();
_summonList.RemoveAt(i);
i--;
}
}
}
public void Dispose()
{
_instance = null;
}
}
}