using H2Engine;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
public class ClientSceneManager : Singleton<ClientSceneManager>
|
{
|
private H2Engine.MapData m_MapData;
|
private List<TransferGroup> m_TransferGroupList = new List<TransferGroup>();
|
private Dictionary<int, IEventHandler> m_EventHandlerDict = new Dictionary<int, IEventHandler>();
|
private List<IEventHandler> m_ReadyRemoveEventHandlerList = new List<IEventHandler>();
|
|
public void Handle_0820(H0820_tagMissionDict package)
|
{
|
if (package.DictKey.Equals("riggerID"))
|
{
|
SnxxzGame.Instance.StartCoroutine(DelayTrigger((int)package.DictValue));
|
}
|
}
|
|
private bool m_Inited = false;
|
|
public void Init()
|
{
|
if (m_Inited)
|
{
|
return;
|
}
|
m_Inited = true;
|
|
int _mapID = PlayerDatas.Instance.baseData.MapID;
|
m_MapData = MapData.LoadFormFile(_mapID);
|
if (m_MapData == null)
|
{
|
return;
|
}
|
|
foreach (var _trasfer in m_MapData.transfers)
|
{
|
m_TransferGroupList.Add(new TransferGroup(_trasfer));
|
}
|
|
}
|
|
public void UnInit()
|
{
|
foreach (var _t in m_TransferGroupList)
|
{
|
_t.UnInit();
|
}
|
m_TransferGroupList.Clear();
|
|
m_Inited = false;
|
}
|
|
public void Update()
|
{
|
foreach (var _trasfer in m_TransferGroupList)
|
{
|
_trasfer.Update();
|
}
|
|
m_ReadyRemoveEventHandlerList.Clear();
|
|
foreach (var _eventHandler in m_EventHandlerDict.Values)
|
{
|
_eventHandler.Update();
|
if (_eventHandler.IsCompelete())
|
{
|
m_ReadyRemoveEventHandlerList.Add(_eventHandler);
|
}
|
}
|
|
foreach (var _eventHandler in m_ReadyRemoveEventHandlerList)
|
{
|
_eventHandler.UnInit();
|
m_EventHandlerDict.Remove(_eventHandler.GetEventID());
|
}
|
|
m_ReadyRemoveEventHandlerList.Clear();
|
}
|
|
public IEventHandler GetEventHandler(int id)
|
{
|
if (m_EventHandlerDict.ContainsKey(id))
|
{
|
return m_EventHandlerDict[id];
|
}
|
return null;
|
}
|
|
public Vector3 GetCloseTransPoint(Vector3 pos)
|
{
|
// 遍历找到离给定点最近并且可寻路至的传送点 P
|
// 找到 P点的 另一端 P1
|
// 判断当前传入的点是否可以寻路至 P1
|
// 不行的话重新寻找 可以的话返回 P1 的坐标
|
float _compareDis;
|
float _dis;
|
|
foreach (var _p in m_TransferGroupList)
|
{
|
|
}
|
|
return Vector3.zero;
|
}
|
|
private IEnumerator DelayTrigger(int id)
|
{
|
while (StageLoad.Instance.isLoading)
|
{
|
yield return null;
|
}
|
|
if (m_MapData == null)
|
{
|
Init();
|
}
|
|
if (m_MapData.triggers == null
|
|| m_MapData.triggers.Length == 0)
|
{
|
yield break;
|
}
|
|
foreach (var _trigger in m_MapData.triggers)
|
{
|
if (_trigger.id != id)
|
{
|
continue;
|
}
|
|
if (_trigger.evevntIDs == null
|
|| _trigger.evevntIDs.Length == 0)
|
{
|
continue;
|
}
|
|
foreach (var _eventID in _trigger.evevntIDs)
|
{
|
if (!m_MapData.eventDict.ContainsKey(_eventID))
|
{
|
continue;
|
}
|
|
var _event = m_MapData.eventDict[_eventID];
|
if (_event.type == Evt.E_EventType.Enemy)
|
{
|
var _refreshEvent = new EventRefreshNPCHandler();
|
_refreshEvent.Init(_event as Evt_RefreshMonster);
|
m_EventHandlerDict.Add(_refreshEvent.GetEventID(), _refreshEvent);
|
}
|
}
|
|
break;
|
}
|
}
|
}
|