123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- 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, false, 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);
- }
- private void HideModel()
- {
- InitModel(_index);
- ChangeModelAlphaAnim(_index, 1, 0);
- }
- 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();
- }
- }
- }
|