Browse Source

修改阳春花蔓活动摘星

leiyasi 1 year ago
parent
commit
f9283e7089

+ 124 - 23
GameClient/Assets/Game/HotUpdate/Views/Common/Controller/LuckyBoxController.cs

@@ -5,6 +5,8 @@ using System.Collections.Generic;
 using System;
 using UnityEngine;
 using System.Collections;
+using Live2D.Cubism.Rendering;
+using DG.Tweening;
 
 namespace GFGGame
 {
@@ -13,15 +15,23 @@ namespace GFGGame
         private GComponent _com;
         // private UI_ComModel _comModel;
         private DressUpObjUI _dressUpObjUI;
+        private DressUpObjUI _dressUpObjUI2;
+
         private LuckyBoxCfg _luckyBoxCfg;
         private const int _turnTime = 8;
         private int _curTime = _turnTime;
         private int _bgIndex = 0;
         private int _modelIndex = 0;
+        private List<DressUpObjUI> _dressUpObjUIs = new List<DressUpObjUI>(2);
 
         public LuckyBoxController(GComponent comModel)
         {
             _dressUpObjUI = new DressUpObjUI("SceneDressUp");
+            _dressUpObjUI2 = new DressUpObjUI("SceneDressUp");
+
+            _dressUpObjUIs.Add(_dressUpObjUI);
+            _dressUpObjUIs.Add(_dressUpObjUI2);
+
             _com = comModel;
         }
 
@@ -31,7 +41,9 @@ namespace GFGGame
             _curTime = _turnTime;
             _luckyBoxCfg = LuckyBoxCfgArray.Instance.GetCfg(luckyBoxId);
             _com.GetChild("loaMask").asLoader.url = ResPathUtil.GetBgImgPath(_luckyBoxCfg.bgResArr[_bgIndex]);
+            InitDressUpObj();
             ChangeRes();
+            InitModel();
             Timers.inst.Remove(UpdateTime);
             if (_luckyBoxCfg.resArr.Length > 1 || _luckyBoxCfg.suitIdArr.Length > 1)
             {
@@ -52,24 +64,27 @@ namespace GFGGame
                 _modelIndex = _modelIndex + 1 == _luckyBoxCfg.suitIdArr.Length ? 0 : _modelIndex + 1;
             }
 
-            _com.GetTransition("t0").Play(ChangeRes);
-            // ChangeRes();
+            HideModel();
+            UpdateIndex();
+            ChangeRes();
+            //_com.GetTransition("t0").Play(ChangeRes);
         }
-        // private void UpdateRes()
-        // {
-        //     Timers.inst.StartCoroutine(ChangeRes());
-        // }
+
+        private int index = 0;
+
         private void ChangeRes()
         {
             UI_ComModel _comModel = UI_ComModel.Proxy(_com);
+            
+            UI_ComModelRes comRes = _comModel.m_comModelRes;
             _comModel.m_loaBg.url = ResPathUtil.GetBgImgPath(_luckyBoxCfg.bgResArr[_bgIndex]);
             if (_luckyBoxCfg.resArr.Length > 0)
             {
                 int direction = _luckyBoxCfg.scaleArr[_modelIndex] >= 0 ? 1 : -1;
                 float scale = _luckyBoxCfg.scaleArr.Length > 0 ? Math.Abs(_luckyBoxCfg.scaleArr[_modelIndex]) / 10000f : 1;
-                _comModel.m_comModelRes.m_loaRes.url = string.Format("ui://LuckyBox/{0}", _luckyBoxCfg.resArr[_modelIndex]);
-                _comModel.m_comModelRes.m_loaRes.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);
-                _comModel.m_comModelRes.m_loaRes.SetScale(direction * scale, scale);
+                comRes.m_loaRes.url = string.Format("ui://LuckyBox/{0}", _luckyBoxCfg.resArr[_modelIndex]);
+                comRes.m_loaRes.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);
+                comRes.m_loaRes.SetScale(direction * scale, scale);
             }
             else if (_luckyBoxCfg.suitIdArr.Length > 0)
             {
@@ -81,27 +96,24 @@ namespace GFGGame
                 if (_luckyBoxCfg.isAni == 0)
                 {
                     SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(_luckyBoxCfg.suitIdArr[_modelIndex]);
-                    _comModel.m_comModelRes.m_loaRes.url = ResPathUtil.GetDressUpPath(suitCfg.aniRes);
-
+                    comRes.m_loaRes.url = ResPathUtil.GetDressUpPath(suitCfg.aniRes);
                     float scale = _luckyBoxCfg.scaleArr.Length > 0 ? Math.Abs(_luckyBoxCfg.scaleArr[_modelIndex]) / 10000f : 1;
-                    _comModel.m_comModelRes.m_loaRes.SetScale(direction * scale, scale);
-                    _comModel.m_comModelRes.m_loaRes.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);
+                    comRes.m_loaRes.SetScale(direction * scale, scale);
+                    comRes.m_loaRes.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);
                 }
                 else
                 {
-                    _comModel.m_comModelRes.m_loaRes.url = "";
-                    _comModel.m_loaMask.alpha = 1;
-                    // yield return null;
+                    comRes = (index == 0 ? _comModel.m_comModelRes : _comModel.m_comModelRes2);
                     int scale = _luckyBoxCfg.scaleArr.Length > 0 ? Math.Abs(_luckyBoxCfg.scaleArr[_modelIndex]) / 10000 : 100;
-                    _dressUpObjUI.ResetSceneObj(scale, false, false, null, false);
-                    _dressUpObjUI.dressUpObj.PutOnSuitCfg(_luckyBoxCfg.suitIdArr[_modelIndex], true, new int[] { ConstDressUpItemType.BEI_JING }, false, false);
-                    _dressUpObjUI.UpdateWrapper(_comModel.m_comModelRes.m_holder);
-                    _dressUpObjUI.sceneObject.transform.localScale = new Vector3(direction * scale, scale, scale);
-                    _comModel.m_comModelRes.m_holder.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);
-                    // yield return null;
+                    _comModel.m_loaMask.alpha = 1;
+                    comRes.m_loaRes.url = "";
+                    _dressUpObjUIs[index].UpdateWrapper(comRes.m_holder);
+                    comRes.m_holder.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);
+                    _dressUpObjUIs[index].ResetSceneObj(scale, false, false, null, false);
+                    _dressUpObjUIs[index].dressUpObj.PutOnSuitCfg(_luckyBoxCfg.suitIdArr[_modelIndex], true, new int[] { ConstDressUpItemType.BEI_JING }, false, false);
+                    _dressUpObjUIs[index].sceneObject.transform.localScale = new Vector3(direction * scale, scale, scale);
                 }
             }
-            _comModel.m_t1.Play();
             UI_ComModel.ProxyEnd();
         }
 
@@ -124,5 +136,94 @@ namespace GFGGame
                 _dressUpObjUI = null;
             }
         }
+
+        private void UpdateIndex()
+        {
+            index ^= 1;
+        }
+
+        private CubismRenderController[] cubismModels;
+        private List<SpriteRenderer> spriteRenderers = new List<SpriteRenderer>();
+        private void InitModel()
+        {
+            Transform model = _dressUpObjUIs[index].sceneObject.transform.Find("Role");
+            cubismModels = model.GetComponentsInChildren<CubismRenderController>();
+            spriteRenderers = new List<SpriteRenderer>(model.GetComponentsInChildren<SpriteRenderer>());
+        }
+
+        private void ShowModel()
+        {
+            //InitModel();
+            int temp = 1 - index;
+            if (_dressUpObjUIs[temp].sceneObject == null)
+            {
+                return;
+            }
+            Transform model = _dressUpObjUIs[temp].sceneObject.transform.Find("Role");
+            cubismModels = model.GetComponentsInChildren<CubismRenderController>();
+            spriteRenderers = new List<SpriteRenderer>(model.GetComponentsInChildren<SpriteRenderer>());
+            //ChangeModelAlphaAnim(0, 1);
+            ChangeModelAlpha(1);
+        }
+
+        private void HideModel()
+        {
+            ShowModel();
+            InitModel();
+            ChangeModelAlphaAnim(1, 0, ChangeComResLayer);
+        }
+
+        private void ChangeComResLayer()
+        {
+            UI_ComModel _comModel = UI_ComModel.Proxy(_com);
+            int index = _comModel.target.GetChildIndex(_comModel.m_comModelRes.target);
+            int index2 = _comModel.target.GetChildIndex(_comModel.m_comModelRes2.target);
+            _comModel.target.SetChildIndex(_comModel.m_comModelRes.target, index2);
+            _comModel.target.SetChildIndex(_comModel.m_comModelRes2.target, index);
+
+            UI_ComModel.ProxyEnd();
+        }
+
+        private void ChangeModelAlpha(float value)
+        {
+            for (int j = 0; j < cubismModels.Length; j++)
+            {
+                cubismModels[j].Opacity = value;
+            }
+
+            for (int i = 0; i < spriteRenderers.Count; i++)
+            {
+                if (spriteRenderers[i] == null)
+                {
+                    spriteRenderers.RemoveAt(i);
+                    continue;
+                }
+                Color color = spriteRenderers[i].color;
+                color.a = value;
+                spriteRenderers[i].color = color;
+            }
+        }
+
+        private void ChangeModelAlphaAnim(float start, float end, Action action = null)
+        {
+            Ease ease = start < end ? Ease.InQuad : Ease.OutQuad;
+            DOTween.To(() => start, (value) =>
+            {
+                ChangeModelAlpha(value);
+            }, end, 1f).SetEase(ease).OnComplete(() =>
+            {
+                action?.Invoke();
+            });
+        }
+
+        private void InitDressUpObj()
+        {
+            UI_ComModel _comModel = UI_ComModel.Proxy(_com);
+
+            _dressUpObjUI.UpdateWrapper(_comModel.m_comModelRes.m_holder);
+            _dressUpObjUI2.UpdateWrapper(_comModel.m_comModelRes2.m_holder);
+
+            UI_ComModel.ProxyEnd();
+        }
     }
 }