using System; using System.Collections.Generic; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using UnityEngine; using Object = UnityEngine.Object; namespace Core.UI.UTool.UITween { [ExecuteInEditMode] 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(); private void OnEnable() { if (Application.isPlaying) { StartPlay(); } } public void Play(string animName) { _currPlay.Clear(); for (int i = 0; i < GrpupInfos.Count; i++) { TweenAssetGrpupInfo tweenAssetGrpupInfo = GrpupInfos[i]; if (tweenAssetGrpupInfo.animName.Equals(animName)) { _currPlay.Add(tweenAssetGrpupInfo); } } } public void StartPlay() { maxDuration = 0; _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; } tweenAssetGrpupInfo.StartPlay(); _currPlay.Add(tweenAssetGrpupInfo); } } 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; } } } } public void JumpToTime(float t) { for (int i = 0; i < GrpupInfos.Count; i++) { GrpupInfos[i].JumpToTime(t); // allTweenInfo[i].Rest(); } 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); } if (currTime >= maxDuration) { isUpdate = false; } } } }