From eead4f0bf2cd6bed6d3bbfa6d2a3a5355022a763 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期日, 28 四月 2019 16:15:05 +0800
Subject: [PATCH] 3335 炼丹表现提交

---
 System/Alchemy/AlchemyStoveBehaviour.cs |  119 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 107 insertions(+), 12 deletions(-)

diff --git a/System/Alchemy/AlchemyStoveBehaviour.cs b/System/Alchemy/AlchemyStoveBehaviour.cs
index 7a48856..4e17af8 100644
--- a/System/Alchemy/AlchemyStoveBehaviour.cs
+++ b/System/Alchemy/AlchemyStoveBehaviour.cs
@@ -8,6 +8,7 @@
 {
     public class AlchemyStoveBehaviour : MonoBehaviour
     {
+        [SerializeField] Transform m_ContainerMaterials;
         [SerializeField] AlchemyMaterial[] m_AlchemyMaterials;
 
         [SerializeField] Transform m_ContainerAlcheming;
@@ -26,6 +27,14 @@
         [SerializeField] Text m_FuncLabel;
         [SerializeField] Transform m_ContainerUnGrasp;
 
+        [SerializeField] UIEffect m_AlchemingEffect;
+        [SerializeField] UIEffect m_AlchemyCompleteEffect;
+        [SerializeField] UIEffect[] m_AlchemyFlyEffects;
+        [SerializeField] Transform m_ContainerFlyMaterials;
+        [SerializeField] Transform[] m_FlyMaterials;
+        [SerializeField] Image[] m_FlyIcons;
+        [SerializeField] UIEffect m_AlchemyBoomEffect;
+
         int m_State = 0; //0-姝e父鐘舵�� 1-鐐间腹涓� 2-鐐间腹缁撴潫
         int state
         {
@@ -41,6 +50,8 @@
         }
 
         float timer = 0f;
+
+        bool animationStep = false;
 
         AlchemyModel model { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
         PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
@@ -91,9 +102,16 @@
             m_ContainerNormal.gameObject.SetActive(state == 0);
             m_ContainerComplete.gameObject.SetActive(state == 2);
 
+            m_AlchemingEffect.StopImediatly();
+            m_AlchemyCompleteEffect.StopImediatly();
+
+            m_ContainerMaterials.gameObject.SetActive(false);
+            m_ContainerFlyMaterials.gameObject.SetActive(false);
+
             switch (state)
             {
                 case 0:
+                    m_ContainerMaterials.gameObject.SetActive(true);
                     m_StoveLevel.text = StringUtility.Contact("Lv.", model.stoveLevel);
                     var isMax = !RefineStoveConfig.Has(model.stoveLevel + 1);
                     var stoveConfig = RefineStoveConfig.Get(model.stoveLevel);
@@ -110,16 +128,11 @@
                     }
                     break;
                 case 1:
-                    uint tick = 0;
-                    if (model.TryGetAlchemyStartTime(model.selectAlchemy, out tick))
-                    {
-                        var config = AlchemyConfig.Get(model.selectAlchemy);
-                        var startTime = TimeUtility.GetTime(tick);
-                        var seconds = (int)(config.NeedTime - (float)(TimeUtility.ServerNow - startTime).TotalSeconds);
-                        m_AlchemyTime.text = TimeUtility.SecondsToHMS(seconds);
-                    }
+                    m_AlchemingEffect.Play();
+                    DisplayAlchemyTime();
                     break;
                 case 2:
+                    m_AlchemyCompleteEffect.Play();
                     break;
             }
 
@@ -164,6 +177,62 @@
             }
         }
 
+        void DisplayAlchemyTime()
+        {
+            uint tick = 0;
+            if (model.TryGetAlchemyStartTime(model.selectAlchemy, out tick))
+            {
+                var config = AlchemyConfig.Get(model.selectAlchemy);
+                var startTime = TimeUtility.GetTime(tick);
+                var seconds = (int)(config.NeedTime - (float)(TimeUtility.ServerNow - startTime).TotalSeconds);
+                m_AlchemyTime.text = TimeUtility.SecondsToHMS(seconds);
+            }
+        }
+
+        void DisplayAnimation()
+        {
+            m_ContainerMaterials.gameObject.SetActive(false);
+            m_ContainerFlyMaterials.gameObject.SetActive(true);
+            List<Item> materials;
+            model.TryGetAlchemyMaterials(model.selectAlchemy, out materials);
+            for (int i = 0; i < m_FlyMaterials.Length; i++)
+            {
+                m_FlyMaterials[i].gameObject.SetActive(i < materials.Count);
+                if (i < materials.Count)
+                {
+                    var itemConfig = ItemConfig.Get(materials[i].id);
+                    m_FlyIcons[i].SetSprite(itemConfig.IconKey);
+                    m_AlchemyFlyEffects[i].Play();
+                    var parent = m_AlchemyFlyEffects[i].target.transform.Find("Animation/GuadianAnimation");
+                    if (parent != null)
+                    {
+                        m_FlyMaterials[i].SetParent(parent);
+                        m_FlyMaterials[i].transform.localPosition = Vector3.zero;
+                    }
+                }
+                else
+                {
+                    m_AlchemyFlyEffects[i].StopImediatly();
+                }
+            }
+
+            StartCoroutine(Co_DisplayAnimation());
+        }
+
+        IEnumerator Co_DisplayAnimation()
+        {
+            m_AlchemyBoomEffect.Play();
+            yield return WaitingForSecondConst.WaitMS700;
+            m_ContainerFlyMaterials.gameObject.SetActive(false);
+            for (int i = 0; i < m_FlyMaterials.Length; i++)
+            {
+                m_FlyMaterials[i].SetParent(m_ContainerFlyMaterials);
+            }
+            animationStep = false;
+            m_State = model.GetStoveState(model.selectAlchemy);
+            DisplayStove();
+        }
+
         private void SelectAlchemyRefresh()
         {
             m_State = model.GetStoveState(model.selectAlchemy);
@@ -173,9 +242,27 @@
 
         private void AlchemyStateRefresh()
         {
-            m_State = model.GetStoveState(model.selectAlchemy);
-            DisplayStove();
-            DisplayAlchemyMaterials();
+            animationStep = false;
+
+            if (model.isServerPrepare)
+            {
+                var newState = model.GetStoveState(model.selectAlchemy);
+                if (newState == 1 && state == 0)
+                {
+                    animationStep = true;
+                }
+            }
+            if (!animationStep)
+            {
+                m_State = model.GetStoveState(model.selectAlchemy);
+                DisplayStove();
+                DisplayAlchemyMaterials();
+            }
+
+            if (animationStep)
+            {
+                DisplayAnimation();
+            }
         }
 
         private void PlayerDataRefreshEvent(PlayerDataType dataType)
@@ -198,13 +285,18 @@
 
         private void PerSecond()
         {
+            if (animationStep)
+            {
+                return;
+            }
+
             var _state = model.GetStoveState(model.selectAlchemy);
 
             if (_state == state)
             {
                 if (state == 1)
                 {
-                    DisplayStove();
+                    DisplayAlchemyTime();
                 }
             }
             else
@@ -300,6 +392,9 @@
             model.alchemyStateRefresh -= AlchemyStateRefresh;
             PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
             packModel.refreshItemCountEvent -= RefreshItemCountEvent;
+
+            StopAllCoroutines();
+            animationStep = false;
         }
     }
 

--
Gitblit v1.8.0