少年修仙传客户端代码仓库
client_Hale
2019-04-16 2f723e5320ef618985cc9ea8f71deafd3e4bec36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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();
                    }
                }
            }
        }
    }
}