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

128 lines
3.5 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
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;
2023-10-19 15:00:19 +08:00
using Gameplay.Common;
2023-10-21 11:55:23 +08:00
using PhxhSDK;
2023-08-22 19:08:45 +08:00
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);
}
2023-10-19 15:00:19 +08:00
public BaseSummon CreateSummon(int summonId, int createCellIndex, SkillHandle skillHandle)
2023-08-22 19:08:45 +08:00
{
var configData = GetConfigById(summonId);
if (configData == null)
{
return null;
}
var guid = GUIDManager.GenGuid();
BaseSummon createSummon = null;
switch (configData.LogicId)
{
case ESummonLogicId.TENT:
2023-10-19 15:00:19 +08:00
createSummon = new SummonTent(configData, guid, skillHandle);
2023-08-22 19:08:45 +08:00
break;
case ESummonLogicId.MINE:
2023-10-19 15:00:19 +08:00
createSummon = new SummonMine(configData, guid, skillHandle);
2023-08-22 19:08:45 +08:00
break;
}
if (createSummon == null)
{
2023-10-19 15:00:19 +08:00
DebugUtil.LogError("暂未处理的召唤物logicId:{0}", configData.LogicId);
2023-08-22 19:08:45 +08:00
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)
{
2023-10-19 15:00:19 +08:00
EventManager.Instance.Send(EventManager.EventName.INFIGHT_UNIT_REMOVE, summon);
2023-08-22 19:08:45 +08:00
// 播放销毁特效
if (summon.configData.DestroyEffectId > 0)
{
EffectManager.instance.PlayEffectById(summon.configData.DestroyEffectId,
summon.Node.GameObject.transform.position,
summon.Node.GameObject.transform.rotation);
}
2023-10-19 15:00:19 +08:00
// 播放销毁音效
if (summon.configData.DestroyAudioId > 0)
{
_ = AudioManager.Instance.PlayAudio(summon.configData.DestroyAudioId, summon.Node.GameObject.transform.position);
}
2023-08-22 19:08:45 +08:00
summon.Dispose();
_summonList.RemoveAt(i);
i--;
}
}
}
public void Dispose()
{
_instance = null;
}
}
}