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; 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 = 8; private int _curTime = _turnTime; private int _bgIndex = 0; private int _modelIndex = 0; private List _dressUpObjUIs = new List(2); 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) { // _comModel = UI_ComModel.Proxy(_com); _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) { 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; } HideModel(); UpdateIndex(); ChangeRes(); //_com.GetTransition("t0").Play(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; 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) { int direction = 1; if (_luckyBoxCfg.scaleArr.Length > 0) { direction = _luckyBoxCfg.scaleArr[_modelIndex] >= 0 ? 1 : -1; } if (_luckyBoxCfg.isAni == 0) { 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 { 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 = ""; _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); } } UI_ComModel.ProxyEnd(); } public void OnHide() { _bgIndex = 0; _modelIndex = 0; _dressUpObjUI.ResetSceneObj(0, false, false, null, false); UI_ComModel _comModel = UI_ComModel.Proxy(_com); _comModel.m_comModelRes.m_loaRes.url = ""; UI_ComModel.ProxyEnd(); Timers.inst.Remove(UpdateTime); } public void Dispose() { if (_dressUpObjUI != null) { _dressUpObjUI.Dispose(); _dressUpObjUI = null; } } private void UpdateIndex() { index ^= 1; } private CubismRenderController[] cubismModels; private List spriteRenderers = new List(); private void InitModel() { Transform model = _dressUpObjUIs[index].sceneObject.transform.Find("Role"); cubismModels = model.GetComponentsInChildren(); spriteRenderers = new List(model.GetComponentsInChildren()); } 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(); spriteRenderers = new List(model.GetComponentsInChildren()); //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(); } } }