From fc714208ff3a320c3bb52bddd5ea3d91f647a206 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期二, 16 四月 2019 15:18:21 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/HazyRegion/ClientHazyGrassStage.cs |  308 ++++++++++++++++++++++++++++++---------------------
 1 files changed, 180 insertions(+), 128 deletions(-)

diff --git a/System/HazyRegion/ClientHazyGrassStage.cs b/System/HazyRegion/ClientHazyGrassStage.cs
index 1c56035..c675610 100644
--- a/System/HazyRegion/ClientHazyGrassStage.cs
+++ b/System/HazyRegion/ClientHazyGrassStage.cs
@@ -1,166 +1,218 @@
-锘縰sing System;
+锘縰sing 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("閲囬泦浜哊pc:--" + 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("閲囬泦浜哊pc:--" + 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
+}
 

--
Gitblit v1.8.0