using System; using System.Collections.Generic; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using UnityEngine; using Object = UnityEngine.Object; namespace Core.UI.UTool.UITween { [ExecuteAlways] public class UITweenController : MonoBehaviour { public float maxDuration; public bool isUpdate; [HideInInspector] public float currTime; public List GrpupInfos = new List(); private BetterList _currPlay = new BetterList(); public ParticleSystem.MinMaxGradient MinMaxGradient = new ParticleSystem.MinMaxGradient(); public bool isLoop; private List _uiTweenControllers = new List(); private void OnEnable() { if (Application.isPlaying) { StartPlay(false); } } void OnDrawGizmos() { #if UNITY_EDITOR if (!Application.isPlaying) { UnityEditor.EditorApplication.QueuePlayerLoopUpdate(); UnityEditor.SceneView.RepaintAll(); } #endif } public void Play(string animName, bool isChildren) { _uiTweenControllers.Clear(); maxDuration = 0; _currPlay.Clear(); isLoop = false; for (int i = 0; i < GrpupInfos.Count; i++) { TweenAssetGrpupInfo tweenAssetGrpupInfo = GrpupInfos[i]; tweenAssetGrpupInfo.SetMaxTime(); if (tweenAssetGrpupInfo.animName.Equals(animName)) { if (tweenAssetGrpupInfo.maxDuration > maxDuration) { maxDuration = tweenAssetGrpupInfo.maxDuration; } if (tweenAssetGrpupInfo.isLoop) { isLoop = true; } tweenAssetGrpupInfo.StartPlay(); _currPlay.Add(tweenAssetGrpupInfo); } } if (isChildren) { UITweenController[] uiTweenControllers = gameObject.transform.GetComponentsInChildren(); _uiTweenControllers.AddRange(uiTweenControllers); _uiTweenControllers.Remove(this); for (int i = 0; i < _uiTweenControllers.Count; i++) { UITweenController uiTweenController = _uiTweenControllers[i]; // if(uiTweenController.) uiTweenController.StartPlay(false); if (uiTweenController.maxDuration > maxDuration) { maxDuration = uiTweenController.maxDuration; } if (uiTweenController.isLoop) { isLoop = true; } } } isUpdate = true; currTime = 0; } public void Stop() { isUpdate = false; } public void StartPlay(bool isChildren) { _uiTweenControllers.Clear(); maxDuration = 0; _currPlay.Clear(); isLoop = false; for (int i = 0; i < GrpupInfos.Count; i++) { TweenAssetGrpupInfo tweenAssetGrpupInfo = GrpupInfos[i]; tweenAssetGrpupInfo.SetMaxTime(); if (tweenAssetGrpupInfo.isActive) { if (tweenAssetGrpupInfo.maxDuration > maxDuration) { maxDuration = tweenAssetGrpupInfo.maxDuration; } if (tweenAssetGrpupInfo.isLoop) { isLoop = true; } tweenAssetGrpupInfo.StartPlay(); _currPlay.Add(tweenAssetGrpupInfo); } } if (isChildren) { UITweenController[] uiTweenControllers = gameObject.transform.GetComponentsInChildren(); _uiTweenControllers.AddRange(uiTweenControllers); _uiTweenControllers.Remove(this); for (int i = 0; i < _uiTweenControllers.Count; i++) { UITweenController uiTweenController = _uiTweenControllers[i]; uiTweenController.StartPlay(false); if (uiTweenController.maxDuration > maxDuration) { maxDuration = uiTweenController.maxDuration; } if (uiTweenController.isLoop) { isLoop = true; } } } isUpdate = true; currTime = 0; } public void SetMaxTime() { maxDuration = 0; for (int i = 0; i < GrpupInfos.Count; i++) { TweenAssetGrpupInfo tweenAssetGrpupInfo = GrpupInfos[i]; tweenAssetGrpupInfo.SetMaxTime(); if (tweenAssetGrpupInfo.isActive) { if (tweenAssetGrpupInfo.maxDuration > maxDuration) { maxDuration = tweenAssetGrpupInfo.maxDuration; } } } for (int i = 0; i < _uiTweenControllers.Count; i++) { UITweenController uiTweenController = _uiTweenControllers[i]; uiTweenController.SetMaxTime(); if (uiTweenController.maxDuration > maxDuration) { maxDuration = uiTweenController.maxDuration; } } } public void JumpToTime(float t) { _currPlay.Clear(); for (int i = 0; i < GrpupInfos.Count; i++) { TweenAssetGrpupInfo tweenAssetGrpupInfo = GrpupInfos[i]; tweenAssetGrpupInfo.SetMaxTime(); if (tweenAssetGrpupInfo.isActive) { if (tweenAssetGrpupInfo.maxDuration > maxDuration) { maxDuration = tweenAssetGrpupInfo.maxDuration; } // // if (tweenAssetGrpupInfo.isLoop) // { // isLoop = true; // } tweenAssetGrpupInfo.StartPlay(); _currPlay.Add(tweenAssetGrpupInfo); } } for (int i = 0; i < _currPlay.Count; i++) { _currPlay[i].JumpToTime(t); // allTweenInfo[i].Rest(); } for (int i = 0; i < _currPlay.Count; i++) { _currPlay[i].PlayTween(t, true); } UITweenController[] uiTweenControllers = gameObject.transform.GetComponentsInChildren(); _uiTweenControllers.AddRange(uiTweenControllers); _uiTweenControllers.Remove(this); for (int i = 0; i < _uiTweenControllers.Count; i++) { UITweenController uiTweenController = _uiTweenControllers[i]; uiTweenController.JumpToTime(t); if (uiTweenController.maxDuration > maxDuration) { maxDuration = uiTweenController.maxDuration; } } // PlayTween(t, true); } private void PlayTween(float t, bool isFallBack) { for (int i = 0; i < GrpupInfos.Count; i++) { GrpupInfos[i].PlayTween(t, isFallBack); } } private void Update() { if (!isUpdate) { return; } currTime += Time.deltaTime; for (int i = 0; i < _currPlay.Count; i++) { _currPlay[i].PlayTween(currTime, false); } for (int i = 0; i < _uiTweenControllers.Count; i++) { _uiTweenControllers[i].PlayTween(currTime, false); } if (!isLoop && currTime >= maxDuration) { isUpdate = false; } } } }