using SHADE; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SHADE_Scripting.UI { public class MultiplierTextFx : Script { [NonSerialized] private TweenThread sizeThread; private TweenThread sizeInvertThread; private TweenThread alphaThread; public float maxSize = 1.0f; public float minSize = 0.3f; public float minAlpha = 0.3f; private bool showMultiplier = false; const float sizeUpDuration = 0.1f; [NonSerialized] private Vector3 defaultScale; protected override void start() { sizeThread = TweenManager.CreateTweenThread(0.0f, maxSize, minSize, EASING_METHOD.EASE_IN_SINE); sizeInvertThread = TweenManager.CreateTweenThread(sizeUpDuration, minSize, maxSize, EASING_METHOD.EASE_IN_SINE); alphaThread = TweenManager.CreateTweenThread(0.0f, 1.0f, minAlpha, EASING_METHOD.EASE_OUT_SINE); Transform transform = GetComponent(); if (transform != null) { defaultScale = transform.LocalScale; transform.LocalScale = Vector3.Zero; } showMultiplier = false; } protected override void update() { Transform transform = GetComponent(); if (transform != null && showMultiplier == true) { if(!sizeInvertThread.IsCompleted()) { transform.LocalScale = defaultScale * sizeInvertThread.GetValue(); Renderable rend = GetComponentInChildren(); if(rend) { rend.Material.SetProperty("data.alpha", 1.0f); } TextRenderable text = GetComponent(); if (text) { Color clr = text.TextColor; text.TextColor = new Color(clr.r, clr.g, clr.b, 1.0f); } return; } if(sizeThread.IsCompleted()) { transform.LocalScale = Vector3.Zero; showMultiplier = false; } else { transform.LocalScale = defaultScale * sizeThread.GetValue(); Renderable rend = GetComponentInChildren(); if (rend) { rend.Material.SetProperty("data.alpha", alphaThread.GetValue()); } TextRenderable text = GetComponent(); if(text) { Color clr = text.TextColor; text.TextColor = new Color(clr.r,clr.g,clr.b,alphaThread.GetValue() * 1.3f); } } } } public void ShowMultiplier(int multiplier, float duration) { GetComponent().Text = $"X {multiplier}"; sizeThread.duration = duration + sizeUpDuration; alphaThread.duration = duration + sizeUpDuration; sizeInvertThread.Reset(); sizeThread.Reset(); alphaThread.Reset(); showMultiplier = true; } } }