From 252d46b8642ad4ecebe1a8b9d3a0678913413ebf Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期三, 14 十一月 2018 15:30:58 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 Fight/GameActor/GActorNpcFight.cs |  305 +++++++++++++++++++++++++-------------------------
 1 files changed, 151 insertions(+), 154 deletions(-)

diff --git a/Fight/GameActor/GActorNpcFight.cs b/Fight/GameActor/GActorNpcFight.cs
index 814cb94..f79510d 100644
--- a/Fight/GameActor/GActorNpcFight.cs
+++ b/Fight/GameActor/GActorNpcFight.cs
@@ -10,7 +10,7 @@
     protected DialogueBubble m_DialogAppear;
     protected DialogueBubble m_DialogTiming;
     protected float m_LastTalkTime;
-    public NPCConfig NpcConfig { get; private set; }
+    public NPCConfig NpcConfig { get; protected set; }
 
     private SFXController m_AppearEffect;
     private bool m_LoadDefaultRes = false;
@@ -50,11 +50,29 @@
         }
     }
 
-    public void Init(uint serverInstID, uint clientInstID, uint npcID, E_ActorGroup group, GameNetPackBasic package)
+    protected override void OnInit(GameNetPackBasic package)
     {
+        base.OnInit(package);
+
         m_LoadDefaultRes = false;
 
-        NpcConfig = Config.Instance.Get<NPCConfig>((int)npcID);
+        var _package = package as H0406_tagNPCAppear;
+        if (_package != null)
+        {
+            NpcConfig = Config.Instance.Get<NPCConfig>((int)_package.NPCID);
+        }
+        else
+        {
+            var _package2 = package as H0408_tagPlayerSummonNPCAppear;
+            if (_package2 != null)
+            {
+                NpcConfig = Config.Instance.Get<NPCConfig>((int)_package2.NPCID);
+            }
+            else
+            {
+                return;
+            }
+        }
 
         if (NpcConfig == null)
         {
@@ -63,143 +81,12 @@
         }
 
         ActorType = GameObjType.gotNPC;
-
-        // 鍒濆鍖栬〃鐜板眰
-        GameObject _prefab = InstanceResourcesLoader.LoadNpcPrefab(NpcConfig.NPCID);
-
-        if (_prefab == null)
-        {
-            if (this is GA_Pet)
-            {
-                _prefab = InstanceResourcesLoader.LoadDefaultPet();
-            }
-            else
-            {
-                _prefab = InstanceResourcesLoader.LoadDefaultFightNPC();
-            }
-
-            if (_prefab)
-            {
-                m_LoadDefaultRes = true;
-            }
-        }
-
-        if (_prefab)
-        {
-            if (PreFightMission.Instance.IsFinished())
-            {
-                GAMgr.Instance.AddNeedDestroyPrefab(_prefab);
-            }
-
-            if (m_LoadDefaultRes)
-            {
-                if (this is GA_Pet)
-                {
-                    m_Model = GameObjectPoolManager.Instance.RequestDefaultPet();
-                }
-                else
-                {
-                    m_Model = GameObjectPoolManager.Instance.RequestDefaultFightNpc();
-                }
-            }
-            else
-            {
-                m_Model = GameObjectPoolManager.Instance.RequestNpcGameObject(NpcConfig.NPCID);
-            }
-
-            if (m_Model)
-            {
-                SkinnedMeshRenderer _renderer = m_Model.GetComponentInChildren<SkinnedMeshRenderer>();
-                if (_renderer)
-                {
-                    _renderer.gameObject.layer = LayerUtility.Monster;
-                    m_Material = _renderer.material;
-                }
-
-                m_Animator = m_Model.GetComponent<Animator>();
-                if (!m_Animator)
-                {
-                    if (m_Model.transform.childCount > 0)
-                    {
-                        m_Animator = m_Model.transform.GetChild(0).GetComponent<Animator>();
-                    }
-                }
-
-                if (m_Animator)
-                {
-                    RuntimeAnimatorController _controller = null;
-                    if (m_LoadDefaultRes)
-                    {
-                        if (this is GA_Pet)
-                        {
-                            _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Pet();
-                        }
-                        else
-                        {
-                            _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Fight();
-                        }
-                    }
-                    else
-                    {
-                        _controller = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, NpcConfig.MODE);
-
-                    }
-
-                    if (_controller)
-                    {
-                        m_Animator.runtimeAnimatorController = _controller;
-                    }
-
-                    m_Animator.enabled = true;
-
-                    if (m_Animator.parameterCount > 0)
-                    {
-                        m_Animator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)clientInstID);
-                    }
-                    IdleImmediate();
-                }
-
-                SetupBindNode(m_Model.transform);
-
-            }
-        }
-
-        // 鎵ц鐖剁被鐨勫垵濮嬪寲
-        Init(serverInstID, clientInstID, group, package);
-
-        if (m_Model)
-        {
-            m_Model.transform.SetParent(m_Root.transform);
-            m_Model.transform.localPosition = Vector3.zero;
-            m_Model.transform.localRotation = Quaternion.identity;
-
-            bool _playEffect = true;
-
-            uint _parentSID = ActorInfo.ownerSID;
-            if (_parentSID != PlayerDatas.Instance.PlayerId)
-            {
-                GA_Player _player = GAMgr.Instance.GetBySID(_parentSID) as GA_Player;
-                if (_player != null)
-                {
-                    _playEffect = _player.ShowOrHide;
-                }
-            }
-
-            if (_playEffect)
-            {
-                if (NpcConfig.NPCEffect != 0)
-                {
-                    m_AppearEffect = SFXPlayUtility.Instance.PlayBattleEffect(NpcConfig.NPCEffect, this);
-                    EffectConfig _effectConfig = Config.Instance.Get<EffectConfig>(NpcConfig.NPCEffect);
-                    if (_effectConfig != null)
-                    {
-                        SoundPlayer.Instance.PlayAudio(m_AudioSource, _effectConfig.audio);
-                    }
-                }
-            }
-        }
-
         Root.gameObject.layer = LayerUtility.Monster;
+
+        if (NpcConfig.ModeProportion != 1)
+        {
+            Root.localScale = Vector3.one * NpcConfig.ModeProportion;
+        }
 
         if (CanBeSelected())
         {
@@ -209,34 +96,87 @@
             _collider.height = NpcConfig.ModleHeight;
         }
 
-        // 褰卞瓙涓嶄緷璧栦簬琛ㄧ幇灞�
         RequestShadow();
 
-        if (NpcConfig.ModeProportion != 1)
-        {
-            Root.localScale = Vector3.one * NpcConfig.ModeProportion;
-        }
+        InstanceResourcesLoader.AsyncLoadNpc(NpcConfig.NPCID, OnPrefabLoadFinished);
+    }
 
-        RequestDialogueBubble();
-
-        GAStaticDefine.NPCLocation _npcLocation;
-        if (GAStaticDefine.TryGetMapNPCLocation(NpcConfig.NPCID, out _npcLocation))
+    private void OnPrefabLoadFinished(bool result, UnityEngine.Object prefab)
+    {
+        if (!result || prefab == null)
         {
-            if (_npcLocation.face != 0)
+            if (!m_LoadDefaultRes)
             {
-                Rotation = MathUtility.GetClientRotationFromAngle(_npcLocation.face);
+                InstanceResourcesLoader.AsyncLoadDefaultFuncNpc(OnPrefabLoadFinished);
+
+                if (this is GA_Pet)
+                {
+                    InstanceResourcesLoader.AsyncLoadDefaultPet(OnPrefabLoadFinished);
+                }
+                else
+                {
+                    InstanceResourcesLoader.AsyncLoadDefaultFightNpc(OnPrefabLoadFinished);
+                }
+
+                m_LoadDefaultRes = true;
             }
             else
             {
-                Rotation = Quaternion.Euler(0, Random.Range(0, 360), 0);
+                m_LoadDefaultRes = false;
+                Debug.LogErrorFormat("鍔犺浇Npc妯″瀷璧勬簮鍑洪敊: {0}", NpcConfig.NPCID);
+            }
+            return;
+        }
+
+        GAMgr.Instance.AddNeedDestroyPrefab(prefab as GameObject);
+
+        if (m_LoadDefaultRes)
+        {
+            if (this is GA_Pet)
+            {
+                m_Model = GameObjectPoolManager.Instance.RequestDefaultPet();
+            }
+            else
+            {
+                m_Model = GameObjectPoolManager.Instance.RequestDefaultFightNpc();
             }
         }
         else
         {
-            Rotation = Quaternion.Euler(0, Random.Range(0, 360), 0);
+            m_Model = GameObjectPoolManager.Instance.RequestGameObject(prefab as GameObject);
         }
 
-        OnAfterInit();
+        if (!m_Model)
+        {
+            return;
+        }
+
+        OnMainModelLoaded();
+
+        bool _playEffect = true;
+
+        uint _parentSID = ActorInfo.ownerSID;
+        if (_parentSID != PlayerDatas.Instance.PlayerId)
+        {
+            GA_Player _player = GAMgr.Instance.GetBySID(_parentSID) as GA_Player;
+            if (_player != null)
+            {
+                _playEffect = _player.ShowOrHide;
+            }
+        }
+
+        if (_playEffect)
+        {
+            if (NpcConfig.NPCEffect != 0)
+            {
+                m_AppearEffect = SFXPlayUtility.Instance.PlayBattleEffect(NpcConfig.NPCEffect, this);
+                EffectConfig _effectConfig = Config.Instance.Get<EffectConfig>(NpcConfig.NPCEffect);
+                if (_effectConfig != null)
+                {
+                    SoundPlayer.Instance.PlayAudio(m_AudioSource, _effectConfig.audio);
+                }
+            }
+        }
     }
 
     protected override void OnUnit()
@@ -555,7 +495,64 @@
     public abstract void OnUnSelect();
     public abstract void OnClick();
 
-    protected virtual void OnAfterInit() { }
+    protected virtual void OnMainModelLoaded()
+    {
+        SkinnedMeshRenderer _renderer = m_Model.GetComponentInChildren<SkinnedMeshRenderer>();
+        if (_renderer)
+        {
+            _renderer.gameObject.layer = LayerUtility.Monster;
+            m_Material = _renderer.material;
+        }
+
+        m_Animator = m_Model.GetComponent<Animator>();
+        if (!m_Animator)
+        {
+            if (m_Model.transform.childCount > 0)
+            {
+                m_Animator = m_Model.transform.GetChild(0).GetComponent<Animator>();
+            }
+        }
+
+        if (m_Animator)
+        {
+            RuntimeAnimatorController _controller = null;
+            if (m_LoadDefaultRes)
+            {
+                if (this is GA_Pet)
+                {
+                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Pet();
+                }
+                else
+                {
+                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Fight();
+                }
+            }
+            else
+            {
+                _controller = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, NpcConfig.MODE);
+
+            }
+
+            if (_controller)
+            {
+                m_Animator.runtimeAnimatorController = _controller;
+            }
+
+            m_Animator.enabled = true;
+
+            if (m_Animator.parameterCount > 0)
+            {
+                m_Animator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)ClientInstID);
+            }
+            IdleImmediate();
+        }
+
+        SetupBindNode(m_Model.transform);
+
+        m_Model.transform.SetParent(m_Root.transform);
+        m_Model.transform.localPosition = Vector3.zero;
+        m_Model.transform.localRotation = Quaternion.identity;
+    }
 
     /// <summary>
     /// 鏄剧ず鎴栬�呴殣钘忚〃鐜板眰

--
Gitblit v1.8.0