From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- .../Scripts/XMainClient/UI/XSparkController.cs | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/UI/XSparkController.cs (limited to 'Client/Assets/Scripts/XMainClient/UI/XSparkController.cs') diff --git a/Client/Assets/Scripts/XMainClient/UI/XSparkController.cs b/Client/Assets/Scripts/XMainClient/UI/XSparkController.cs new file mode 100644 index 00000000..e54469e7 --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/UI/XSparkController.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using UILib; +using UnityEngine; +using XUtliPoolLib; + +namespace XMainClient.UI +{ + internal class XSparkController + { + public Rect Region { get; set; } + + public uint Count { get; set; } + + private XUIPool m_Pool = new XUIPool(XSingleton.singleton.m_uiTool); + + private float _ScaleMin = 1f; + + private float _ScaleMax = 2f; + + private float _DelayMin = 1f; + + private float _DelayMax = 6f; + + private int _FrameRateMin = 10; + + private int _FrameRateMax = 20; + + private Dictionary m_TimeTokens = new Dictionary(); + + public void InitSprite(GameObject parent, GameObject target) + { + this.m_Pool.SetupPool(parent, target, 2u, false); + } + + public void InitScaleRange(float min, float max) + { + this._ScaleMax = max; + this._ScaleMin = min; + } + + public void InitDelayRange(float min, float max) + { + this._DelayMax = max; + this._DelayMin = min; + } + + public void InitFrameRateRange(int min, int max) + { + this._FrameRateMax = max; + this._FrameRateMin = min; + } + + public void Setup() + { + this.StopAll(); + this.m_Pool.FakeReturnAll(); + int num = 0; + while ((long)num < (long)((ulong)this.Count)) + { + GameObject gameObject = this.m_Pool.FetchGameObject(false); + IXUISpriteAnimation ixuispriteAnimation = gameObject.GetComponent("XUISpriteAnimation") as IXUISpriteAnimation; + ixuispriteAnimation.RegisterFinishCallback(new SpriteAnimationFinishCallback(this._OnSparkFinish)); + this._GenerateSpark(gameObject, true); + num++; + } + this.m_Pool.ActualReturnAll(false); + } + + public void StopAll() + { + foreach (uint token in this.m_TimeTokens.Values) + { + XSingleton.singleton.KillTimer(token); + } + this.m_TimeTokens.Clear(); + } + + private void _GenerateSpark(GameObject go, bool bStart) + { + float interval = XSingleton.singleton.RandomFloat(this._DelayMin, this._DelayMax); + int frameRate = XSingleton.singleton.RandomInt(this._FrameRateMin, this._FrameRateMax); + float num = XSingleton.singleton.RandomFloat(this._ScaleMin, this._ScaleMax); + Vector3 localPosition; + localPosition.x = XSingleton.singleton.RandomFloat(this.Region.xMin, this.Region.xMax); + localPosition.y = XSingleton.singleton.RandomFloat(this.Region.yMin, this.Region.yMax); + localPosition.z = 0f; + IXUISpriteAnimation ixuispriteAnimation = go.GetComponent("XUISpriteAnimation") as IXUISpriteAnimation; + ixuispriteAnimation.SetFrameRate(frameRate); + go.transform.localScale = Vector3.one * num; + go.transform.localPosition = localPosition; + uint value = XSingleton.singleton.SetTimer(interval, new XTimerMgr.ElapsedEventHandler(this._SparkShow), go); + this.m_TimeTokens.Add(go, value); + go.SetActive(false); + } + + private void _SparkShow(object o) + { + GameObject gameObject = o as GameObject; + IXUISpriteAnimation ixuispriteAnimation = gameObject.GetComponent("XUISpriteAnimation") as IXUISpriteAnimation; + ixuispriteAnimation.Reset(); + gameObject.SetActive(true); + this.m_TimeTokens.Remove(gameObject); + } + + private void _OnSparkFinish(IXUISpriteAnimation anim) + { + this._GenerateSpark(anim.gameObject, false); + } + } +} -- cgit v1.1-26-g67d0