128 lines
3.5 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|