| | |
| | | using System;
|
| | | using Snxxz.UI;
|
| | | using System;
|
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | namespace Snxxz.UI
|
| | | using UnityEngine;
|
| | | public class ClientHazyGrassStage : DungeonStage
|
| | | {
|
| | | public class ClientHazyGrassStage : DungeonStage
|
| | | static readonly Vector3 PlayerBornPosition1 = new Vector3(17.25f, 5.12f, 3.70f);
|
| | | static readonly Vector3 PlayerBornPosition2 = new Vector3(17.25f, 5.12f, 3.70f);
|
| | |
|
| | | static List<HazyMapNpcScriptableObject.NpcInfo> s_NpcInfos = new List<HazyMapNpcScriptableObject.NpcInfo>();
|
| | | static Dictionary<Vector3, GA_NpcClientCollect> s_CollectNpcs = new Dictionary<Vector3, GA_NpcClientCollect>();
|
| | | static Dictionary<uint, Vector3> s_Sid2NpcPos = new Dictionary<uint, Vector3>();
|
| | | static Dictionary<uint, int> s_Sid2NpcIds = new Dictionary<uint, int>();
|
| | | static List<GA_NpcClientFightNorm> s_ClientFightNpcs = new List<GA_NpcClientFightNorm>();
|
| | |
|
| | | static int grassRefreshCount = 0;
|
| | |
|
| | | bool mapLoadFinish = false;
|
| | | bool initedFightNpc = false;
|
| | |
|
| | | HazyRegionIncidentType incidentType;
|
| | |
|
| | | HazyGrassModel model { get { return ModelCenter.Instance.GetModel<HazyGrassModel>(); } }
|
| | | HazyRegionModel hazyRegionModel { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } }
|
| | |
|
| | | public override void Initialize()
|
| | | {
|
| | | static readonly Vector3 PlayerBornPosition = new Vector3(17.25f, 5.12f, 3.70f);
|
| | | base.Initialize();
|
| | |
|
| | | static List<HazyMapNpcScriptableObject.NpcInfo> s_NpcInfos = new List<HazyMapNpcScriptableObject.NpcInfo>();
|
| | | static Dictionary<Vector3, GA_NpcClientCollect> s_CollectNpcs = new Dictionary<Vector3, GA_NpcClientCollect>();
|
| | | static Dictionary<uint, Vector3> s_Sid2NpcPos = new Dictionary<uint, Vector3>();
|
| | | static Dictionary<uint, int> s_Sid2NpcIds = new Dictionary<uint, int>();
|
| | | s_NpcInfos.Clear();
|
| | | s_Sid2NpcIds.Clear();
|
| | | s_Sid2NpcPos.Clear();
|
| | |
|
| | | static int grassRefreshCount = 0;
|
| | | mapLoadFinish = false;
|
| | | initedFightNpc = false;
|
| | |
|
| | | bool mapLoadFinish = false;
|
| | | grassRefreshCount = 0;
|
| | |
|
| | | HazyGrassModel model { get { return ModelCenter.Instance.GetModel<HazyGrassModel>(); } }
|
| | |
|
| | | public override void Initialize()
|
| | | var config = HazyRegionConfig.Get(hazyRegionModel.processingIncidentId);
|
| | | if (config != null)
|
| | | {
|
| | | base.Initialize();
|
| | |
|
| | | s_NpcInfos.Clear();
|
| | | s_Sid2NpcIds.Clear();
|
| | | s_Sid2NpcPos.Clear();
|
| | |
|
| | | mapLoadFinish = false;
|
| | |
|
| | | grassRefreshCount = 0;
|
| | |
|
| | | UnloadAllNpc();
|
| | |
|
| | | GA_NpcClientCollect.OnCollectFinished += OnCollectFinished;
|
| | | incidentType = (HazyRegionIncidentType)config.incidentType;
|
| | | }
|
| | |
|
| | | protected override void OnStageLoadFinish()
|
| | | UnloadAllNpc();
|
| | |
|
| | | GA_NpcClientCollect.OnCollectFinished += OnCollectFinished;
|
| | | }
|
| | |
|
| | | protected override void OnStageLoadFinish()
|
| | | {
|
| | | base.OnStageLoadFinish();
|
| | |
|
| | | mapLoadFinish = true;
|
| | | model.RefreshGrassBornTime(TimeUtility.ServerNow);
|
| | |
|
| | | InitialPlayer();
|
| | | InitializeNpc();
|
| | |
|
| | | initedFightNpc = true;
|
| | | }
|
| | |
|
| | | protected override void OnUpdate()
|
| | | {
|
| | | base.OnUpdate();
|
| | |
|
| | | if (mapLoadFinish)
|
| | | {
|
| | | base.OnStageLoadFinish();
|
| | |
|
| | | mapLoadFinish = true;
|
| | | model.RefreshGrassBornTime(TimeUtility.ServerNow);
|
| | |
|
| | | InitialPlayer();
|
| | | InitializeNpc();
|
| | | }
|
| | |
|
| | | protected override void OnUpdate()
|
| | | {
|
| | | base.OnUpdate();
|
| | |
|
| | | if (mapLoadFinish)
|
| | | var used = Mathf.Max(0, (int)(TimeUtility.ServerNow - model.grassBornTime).TotalSeconds);
|
| | | var count = used / model.grassRefreshSeconds;
|
| | | if (count != grassRefreshCount)
|
| | | {
|
| | | var used = Mathf.Max(0, (int)(TimeUtility.ServerNow - model.grassBornTime).TotalSeconds);
|
| | | var count = used / model.grassRefreshSeconds;
|
| | | if (count != grassRefreshCount)
|
| | | {
|
| | | RebornCollectedNpc();
|
| | | grassRefreshCount = count;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public override void UnInitialize()
|
| | | {
|
| | | base.UnInitialize();
|
| | |
|
| | | UnloadAllNpc();
|
| | |
|
| | | GA_NpcClientCollect.OnCollectFinished -= OnCollectFinished;
|
| | | }
|
| | |
|
| | | private void OnCollectFinished(uint _sid)
|
| | | {
|
| | | if (s_Sid2NpcIds.ContainsKey(_sid))
|
| | | {
|
| | | var npcId = s_Sid2NpcIds[_sid];
|
| | | Debug.Log("采集了Npc:--" + npcId);
|
| | | }
|
| | |
|
| | | if (s_Sid2NpcPos.ContainsKey(_sid))
|
| | | {
|
| | | var pos = s_Sid2NpcPos[_sid];
|
| | | if (s_CollectNpcs.ContainsKey(pos))
|
| | | {
|
| | | s_CollectNpcs.Remove(pos);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | void InitializeNpc()
|
| | | {
|
| | | s_NpcInfos.Clear();
|
| | |
|
| | | var config = ScriptableObjectLoader.LoadSoHazyMapNpc(ClientDungeonStageUtility.clientMapId);
|
| | | var npcInfos = config.GetAllNpcInfos();
|
| | | if (npcInfos != null)
|
| | | {
|
| | | s_NpcInfos.AddRange(npcInfos);
|
| | | RebornCollectedNpc();
|
| | | grassRefreshCount = count;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | void InitialPlayer()
|
| | | public override void UnInitialize()
|
| | | {
|
| | | base.UnInitialize();
|
| | |
|
| | | UnloadAllNpc();
|
| | |
|
| | | GA_NpcClientCollect.OnCollectFinished -= OnCollectFinished;
|
| | | }
|
| | |
|
| | | private void OnCollectFinished(uint _sid)
|
| | | {
|
| | | if (s_Sid2NpcIds.ContainsKey(_sid))
|
| | | {
|
| | | var hero = PlayerDatas.Instance.hero;
|
| | | hero.Pos = PlayerBornPosition;
|
| | | CameraController.Instance.Apply();
|
| | | var npcId = s_Sid2NpcIds[_sid];
|
| | | Debug.Log("采集了Npc:--" + npcId);
|
| | | }
|
| | |
|
| | | void RebornCollectedNpc()
|
| | | if (s_Sid2NpcPos.ContainsKey(_sid))
|
| | | {
|
| | | foreach (var npcInfo in s_NpcInfos)
|
| | | var pos = s_Sid2NpcPos[_sid];
|
| | | if (s_CollectNpcs.ContainsKey(pos))
|
| | | {
|
| | | switch (npcInfo.npcType)
|
| | | {
|
| | | case E_NpcType.Collect:
|
| | | GA_NpcClientCollect _npc = null;
|
| | | if (!s_CollectNpcs.TryGetValue(npcInfo.position, out _npc)
|
| | | || _npc == null || _npc.ActorInfo.serverDie)
|
| | | s_CollectNpcs.Remove(pos);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | void InitializeNpc()
|
| | | {
|
| | | s_NpcInfos.Clear();
|
| | |
|
| | | var config = ScriptableObjectLoader.LoadSoHazyMapNpc(ClientDungeonStageUtility.clientMapId);
|
| | | var npcInfos = config.GetAllNpcInfos();
|
| | | if (npcInfos != null)
|
| | | {
|
| | | s_NpcInfos.AddRange(npcInfos);
|
| | | RebornCollectedNpc();
|
| | | }
|
| | | }
|
| | |
|
| | | void InitialPlayer()
|
| | | {
|
| | | var hero = PlayerDatas.Instance.hero;
|
| | | if (incidentType == HazyRegionIncidentType.ReikiGrass)
|
| | | {
|
| | | hero.Pos = PlayerBornPosition1;
|
| | | }
|
| | | else if (incidentType == HazyRegionIncidentType.FairyGrass)
|
| | | {
|
| | | hero.Pos = PlayerBornPosition2;
|
| | | }
|
| | | CameraController.Instance.Apply();
|
| | | }
|
| | |
|
| | | void RebornCollectedNpc()
|
| | | {
|
| | | foreach (var npcInfo in s_NpcInfos)
|
| | | {
|
| | | switch (npcInfo.npcType)
|
| | | {
|
| | | case E_NpcType.Collect:
|
| | | GA_NpcClientCollect _npc = null;
|
| | | if (!s_CollectNpcs.TryGetValue(npcInfo.position, out _npc)
|
| | | || _npc == null || _npc.ActorInfo.serverDie)
|
| | | {
|
| | | _npc = GAMgr.Instance.ReqClntNoFightNpc<GA_NpcClientCollect>((uint)npcInfo.npcId,
|
| | | E_ActorGroup.FuncNpc);
|
| | | if (_npc != null)
|
| | | {
|
| | | _npc = GAMgr.Instance.ReqClntNoFightNpc<GA_NpcClientCollect>((uint)npcInfo.npcId,
|
| | | E_ActorGroup.FuncNpc);
|
| | | if (_npc != null)
|
| | | {
|
| | | _npc.Pos = npcInfo.position;
|
| | | s_CollectNpcs[npcInfo.position] = _npc;
|
| | | _npc.Pos = npcInfo.position;
|
| | | s_CollectNpcs[npcInfo.position] = _npc;
|
| | |
|
| | | s_Sid2NpcIds[_npc.ServerInstID] = npcInfo.npcId;
|
| | | s_Sid2NpcPos[_npc.ServerInstID] = npcInfo.position;
|
| | | }
|
| | | s_Sid2NpcIds[_npc.ServerInstID] = npcInfo.npcId;
|
| | | s_Sid2NpcPos[_npc.ServerInstID] = npcInfo.position;
|
| | | }
|
| | | break;
|
| | | }
|
| | | }
|
| | | break;
|
| | | case E_NpcType.Fight:
|
| | | if (!initedFightNpc)
|
| | | {
|
| | | var fightNpc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>((uint)npcInfo.npcId,
|
| | | E_ActorGroup.Enemy);
|
| | | if (fightNpc != null)
|
| | | {
|
| | | fightNpc.Pos = npcInfo.position;
|
| | | fightNpc.OnAttacked -= OnAttackNpc;
|
| | | fightNpc.OnAttacked += OnAttackNpc;
|
| | | }
|
| | | s_ClientFightNpcs.Add(fightNpc);
|
| | | }
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | private void OnAttackNpc()
|
| | | {
|
| | | Debug.Log("攻击了宝箱怪");
|
| | | }
|
| | |
|
| | | void UnloadAllNpc()
|
| | | {
|
| | | foreach (var _npc in s_CollectNpcs.Values)
|
| | | {
|
| | | if (_npc != null)
|
| | | {
|
| | | _npc.KillerServerInstID = PlayerDatas.Instance.PlayerId;
|
| | | _npc.ActorInfo.serverDie = true;
|
| | | GAMgr.Instance.ServerDie(_npc.ServerInstID);
|
| | | GAMgr.Instance.Release(_npc);
|
| | | }
|
| | | }
|
| | |
|
| | | void UnloadAllNpc()
|
| | | foreach (var _npc in s_ClientFightNpcs)
|
| | | {
|
| | | foreach (var _npc in s_CollectNpcs.Values)
|
| | | if (_npc != null)
|
| | | {
|
| | | if (_npc != null)
|
| | | {
|
| | | _npc.KillerServerInstID = PlayerDatas.Instance.PlayerId; |
| | | _npc.ActorInfo.serverDie = true; |
| | | GAMgr.Instance.ServerDie(_npc.ServerInstID); |
| | | GAMgr.Instance.Release(_npc);
|
| | | }
|
| | | _npc.OnAttacked -= OnAttackNpc;
|
| | | _npc.ActorInfo.serverDie = true;
|
| | | GAMgr.Instance.ServerDie(_npc.ServerInstID);
|
| | | GAMgr.Instance.Release(_npc);
|
| | | }
|
| | | s_CollectNpcs.Clear();
|
| | | }
|
| | |
|
| | | s_ClientFightNpcs.Clear();
|
| | | s_CollectNpcs.Clear();
|
| | | }
|
| | |
|
| | | #if UNITY_EDITOR
|
| | | private void OnGUI()
|
| | | private void OnGUI()
|
| | | {
|
| | | if (GUILayout.Button("Exit"))
|
| | | {
|
| | | if (GUILayout.Button("Exit"))
|
| | | {
|
| | | model.RequestExitClientDungeon();
|
| | | }
|
| | | model.RequestExitClientDungeon();
|
| | | }
|
| | | #endif
|
| | | }
|
| | | } |
| | | #endif
|
| | | }
|
| | | |