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 _summonList; public void Init() { _summonList = new List(); } 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; } } }