少年修仙传客户端代码仓库
client_Wu Xijin
2019-03-05 efa5f8d07fc3321f6ac5f5d97fb422db28d0886f
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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;
        }
    }
}