using System.Collections;
|
using Snxxz.UI;
|
using UnityEngine.SceneManagement;
|
using UnityEngine;
|
using System;
|
|
public class AdventureStage : Singleton<AdventureStage>
|
{
|
public bool IsInAdventureStage { get; private set; }
|
|
private Vector3 m_CacheHeroPos;
|
private GA_NpcClientFunc m_Npc;
|
|
public event Action onLoadAdventureStage;
|
public event Action onExitAdventureStage;
|
|
HazyRegionModel hazyRegionModel { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } }
|
|
public void Enter()
|
{
|
IsInAdventureStage = true;
|
m_CacheHeroPos = PlayerDatas.Instance.hero.Pos;
|
SnxxzGame.Instance.StartCoroutine(_Enter());
|
}
|
|
public void Exit()
|
{
|
IsInAdventureStage = false;
|
SnxxzGame.Instance.StartCoroutine(_Exit());
|
}
|
|
private IEnumerator _Enter()
|
{
|
WindowCenter.Instance.Open<LoadingWin>();
|
if (!AssetSource.sceneFromEditor)
|
{
|
AssetBundleUtility.Instance.Sync_LoadAll("maps/map000_xsdt");
|
}
|
var _async = SceneManager.LoadSceneAsync("Map000_Xsdt", LoadSceneMode.Additive);
|
yield return _async;
|
var _hero = PlayerDatas.Instance.hero;
|
if (_hero != null)
|
{
|
_hero.Pos = new Vector3(188.49f, 62.512f, 23.85f);
|
}
|
CameraController.Instance.Apply();
|
yield return null;
|
WindowCenter.Instance.Close<LoadingWin>();
|
m_Npc = GAMgr.Instance.ReqClntNoFightNpc<GA_NpcClientFunc>((uint)hazyRegionModel.GetAdventureNpcId(), E_ActorGroup.FuncNpc);
|
m_Npc.Pos = new Vector3(189.101f, 62.47324f, 26.147f);
|
NPCInteractProcessor.s_NpcInteractEvent -= OnNpcTalkEvent;
|
NPCInteractProcessor.s_NpcInteractEvent += OnNpcTalkEvent;
|
|
if (onLoadAdventureStage != null)
|
{
|
onLoadAdventureStage();
|
}
|
}
|
|
private IEnumerator _Exit()
|
{
|
NPCInteractProcessor.s_NpcInteractEvent -= OnNpcTalkEvent;
|
GAMgr.Instance.ServerDie(m_Npc.ServerInstID);
|
GAMgr.Instance.Release(m_Npc);
|
|
WindowCenter.Instance.Open<LoadingWin>();
|
WindowCenter.Instance.Close<MainInterfaceWin>();
|
var _async = SceneManager.UnloadSceneAsync("Map000_Xsdt");
|
yield return _async;
|
if (!AssetSource.sceneFromEditor)
|
{
|
AssetBundleUtility.Instance.UnloadAssetBundle("maps/map000_xsdt", true, false);
|
}
|
var _hero = PlayerDatas.Instance.hero;
|
if (_hero != null)
|
{
|
_hero.Pos = m_CacheHeroPos;
|
}
|
CameraController.Instance.Apply();
|
yield return null;
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
WindowCenter.Instance.Close<LoadingWin>();
|
|
if (onExitAdventureStage != null)
|
{
|
onExitAdventureStage();
|
}
|
}
|
|
private void OnNpcTalkEvent(E_NpcType type, int npcid, uint sid)
|
{
|
if (E_NpcType.Func == type)
|
{
|
if (m_Npc != null)
|
{
|
if (m_Npc.NpcConfig.NPCID == npcid
|
&& m_Npc.ServerInstID == sid)
|
{
|
if (!WindowCenter.Instance.IsOpen<HazyRegionDialogueWin>())
|
{
|
hazyRegionModel.StartAdventureDialogue();
|
}
|
}
|
}
|
}
|
}
|
}
|