| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 | using UI.LuckyBox;using FairyGUI;using ET;using System.Collections.Generic;using System;using UnityEngine;using System.Collections;using Live2D.Cubism.Rendering;using DG.Tweening;using System.Threading.Tasks;namespace GFGGame{    public class LuckyBoxController    {        private GComponent _com;        // private UI_ComModel _comModel;        private DressUpObjUI _dressUpObjUI;        private DressUpObjUI _dressUpObjUI2;        private LuckyBoxCfg _luckyBoxCfg;        private const int _turnTime = 7;        private int _bgIndex = 0;        private int _modelIndex = 0;        private List<DressUpObjUI> _dressUpObjUIs = new List<DressUpObjUI>(2);        private ModelInfo[] modelInfos = new ModelInfo[2];        private class ModelInfo        {            public CubismRenderController[] cubismModels;            public List<SpriteRenderer> spriteRenderers = new List<SpriteRenderer>();        }        public LuckyBoxController(GComponent comModel)        {            _dressUpObjUI = new DressUpObjUI("SceneDressUp");            _dressUpObjUI2 = new DressUpObjUI("SceneDressUp");            _dressUpObjUIs.Add(_dressUpObjUI);            _dressUpObjUIs.Add(_dressUpObjUI2);            _com = comModel;        }        public void OnShown(int luckyBoxId)        {            _luckyBoxCfg = LuckyBoxCfgArray.Instance.GetCfg(luckyBoxId);            _com.GetChild("loaMask").asLoader.url = ResPathUtil.GetBgImgPath(_luckyBoxCfg.bgResArr[_bgIndex]);            InitDressUpObj();            ChangeRes();            Timers.inst.Remove(UpdateTime);            if (_luckyBoxCfg.resArr.Length > 1 || _luckyBoxCfg.suitIdArr.Length > 1)            {                Timers.inst.Add(_turnTime, 0, UpdateTime);            }        }        private void UpdateTime(object param)        {            _com.GetChild("loaMask").asLoader.url = ResPathUtil.GetBgImgPath(_luckyBoxCfg.bgResArr[_bgIndex]);            _bgIndex = _bgIndex + 1 == _luckyBoxCfg.bgResArr.Length ? 0 : _bgIndex + 1;            if (_luckyBoxCfg.resArr.Length > 0)            {                _modelIndex = _modelIndex + 1 == _luckyBoxCfg.resArr.Length ? 0 : _modelIndex + 1;            }            else            {                _modelIndex = _modelIndex + 1 == _luckyBoxCfg.suitIdArr.Length ? 0 : _modelIndex + 1;            }            if (_luckyBoxCfg.isAni == 0)            {                _com.GetTransition("t0").Play(ChangeRes);            }            else            {                HideModel();                UpdateIndex();                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)            {                //comRes.m_loaRes.url = string.Format("ui://LuckyBox/{0}", _luckyBoxCfg.resArr[_modelIndex]);                comRes.m_loaRes.url = ResPathUtil.GetBgImgPath(_luckyBoxCfg.resArr[_modelIndex]);                EventAgent.DispatchEvent(ConstMessage.LUCKY_EFFECT_UPDATE, _luckyBoxCfg.resArr[_modelIndex]);                comRes.m_loaTitle.url = ResPathUtil.GetLuckyBoxTitlePath(_luckyBoxCfg.resArr[_modelIndex]);                comRes.m_loaRes.SetPosition(-110, -170, 1);                int direction = _luckyBoxCfg.scaleArr[_modelIndex] >= 0 ? 1 : -1;                float scale = _luckyBoxCfg.scaleArr.Length > 0 ? Math.Abs(_luckyBoxCfg.scaleArr[_modelIndex]) / 10000f : 1;                comRes.m_loaRes.SetScale(direction * scale, scale);            }            else if (_luckyBoxCfg.suitIdArr.Length > 0)            {                int direction = 1;                if (_luckyBoxCfg.scaleArr.Length > 0)                {                    direction = _luckyBoxCfg.scaleArr[_modelIndex] >= 0 ? 1 : -1;                }                if (_luckyBoxCfg.isAni == 0)                {                    _comModel.m_loaMask.visible = true;                    SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(_luckyBoxCfg.suitIdArr[_modelIndex]);                    comRes.m_loaRes.url = ResPathUtil.GetDressUpPath(suitCfg.aniRes);                    float scale = _luckyBoxCfg.scaleArr.Length > 0 ? Math.Abs(_luckyBoxCfg.scaleArr[_modelIndex]) / 10000f : 1;                    comRes.m_loaRes.SetScale(direction * scale, scale);                    comRes.m_loaRes.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);                }                else                {                    _comModel.m_loaMask.visible = false;                    comRes = (_index == 0 ? _comModel.m_comModelRes : _comModel.m_comModelRes2);                    int scale = _luckyBoxCfg.scaleArr.Length > 0 ? Math.Abs(_luckyBoxCfg.scaleArr[_modelIndex]) / 10000 : 100;                    _comModel.m_loaMask.alpha = 1;                    comRes.m_loaRes.url = "";                    if(modelInfos[_index] == null)                    {                        modelInfos[_index] = new ModelInfo();                        _dressUpObjUIs[_index].UpdateWrapper(comRes.m_holder);                        comRes.m_holder.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);                        _dressUpObjUIs[_index].ResetSceneObj(scale, false, true, null, false);                        _dressUpObjUIs[_index].dressUpObj.PutOnSuitCfg(_luckyBoxCfg.suitIdArr[_modelIndex], true, new int[] { ConstDressUpItemType.BEI_JING }, false, false);                        Timers.inst.StartCoroutine(DelayShowModel(direction));                    }                    else                    {                        ShowModel();                    }                                    }            }            if (_luckyBoxCfg.isAni == 0)            {                _com.GetTransition("t1").Play();            }            UI_ComModel.ProxyEnd();        }        private IEnumerator DelayShowModel(int direction)        {            _dressUpObjUIs[_index].sceneObject.transform.localScale = Vector3.zero;            // 未加载到live2D之前,不做显示            while (!InitModel(_index))            {                yield return new WaitForEndOfFrame();            }            int scale = _luckyBoxCfg.scaleArr.Length > 0 ? Math.Abs(_luckyBoxCfg.scaleArr[_modelIndex]) / 10000 : 100;            _dressUpObjUIs[_index].sceneObject.transform.localScale = new Vector3(direction * scale, scale, scale);            ShowModel();        }        public void OnHide()        {            DOTween.Kill("fade");            _bgIndex = 0;            _modelIndex = 0;            _dressUpObjUI.dressUpObj.TakeOffAll();            ChangeModelAlpha(0, 1);            ChangeModelAlpha(1, 1);            // 隐藏另一个模型            if (_dressUpObjUIs[0].sceneObject != null)            {                _dressUpObjUIs[0].sceneObject.transform.localScale = Vector3.zero;            }            if (_dressUpObjUIs[1].sceneObject != null)            {                _dressUpObjUIs[1].sceneObject.transform.localScale = Vector3.zero;            }            UI_ComModel _comModel = UI_ComModel.Proxy(_com);            _comModel.m_comModelRes.m_loaRes.url = "";            _comModel.m_comModelRes.m_loaTitle.url = "";            UI_ComModel.ProxyEnd();            Timers.inst.Remove(UpdateTime);        }        public void Dispose()        {            if (_dressUpObjUI != null)            {                _dressUpObjUI.Dispose();                _dressUpObjUI = null;            }            if (_dressUpObjUI2 != null)            {                _dressUpObjUI2.Dispose();                _dressUpObjUI2 = null;            }            _dressUpObjUIs.Clear();        }        private void UpdateIndex()        {            _index ^= 1;        }        private bool InitModel(int index)        {            if (index >= _dressUpObjUIs.Count || _dressUpObjUIs[index].sceneObject == null)            {                return false;            }            Transform model = _dressUpObjUIs[index].sceneObject.transform.Find("Role");            modelInfos[index].cubismModels = model.GetComponentsInChildren<CubismRenderController>();            modelInfos[index].spriteRenderers = new List<SpriteRenderer>(model.GetComponentsInChildren<SpriteRenderer>());            return modelInfos[index].cubismModels.Length > 0;        }        private void ShowModel()        {            ChangeModelAlphaAnim(_index, 0, 1);            Transform obj = _dressUpObjUIs[_index].sceneObject.transform;            if(obj != null)            {                obj.gameObject.SetActive(true);            }            }        private void HideModel()        {            InitModel(_index);            ChangeModelAlphaAnim(_index, 1, 0);            Transform obj = _dressUpObjUIs[_index].sceneObject.transform;            if(obj != null)            {                obj.gameObject.SetActive(false);            }        }        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(int index, float value)        {            if (modelInfos[index] == null || modelInfos[index].cubismModels == null)            {                return;            }            for (int j = 0; j < modelInfos[index].cubismModels.Length; j++)            {                modelInfos[index].cubismModels[j].Opacity = value;            }            for (int i = 0; i < modelInfos[index].spriteRenderers.Count; i++)            {                if (modelInfos[index].spriteRenderers[i] == null)                {                    modelInfos[index].spriteRenderers.RemoveAt(i);                    continue;                }                Color color = modelInfos[index].spriteRenderers[i].color;                color.a = value;                modelInfos[index].spriteRenderers[i].color = color;            }        }        private void ChangeModelAlphaAnim(int index, float start, float end, Action action = null)        {            Ease ease = Ease.Linear;            DOTween.To(() => start, (value) =>            {                ChangeModelAlpha(index, value);            }, end, 0.3f).SetEase(ease).OnComplete(() =>            {                action?.Invoke();            }).SetAutoKill().SetId("fade");        }        private void InitDressUpObj()        {            modelInfos[0] = null;            modelInfos[1] = null;            UI_ComModel _comModel = UI_ComModel.Proxy(_com);            _dressUpObjUI.UpdateWrapper(_comModel.m_comModelRes.m_holder);            _dressUpObjUI2.UpdateWrapper(_comModel.m_comModelRes2.m_holder);            UI_ComModel.ProxyEnd();        }    }}
 |