using CinemaDirector.Helpers; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine.UI; using UnityEngine; namespace CinemaDirector { [CutsceneItemAttribute("uGUI", "Text Remover", CutsceneItemGenre.ActorItem)] public class TextDegenerationEvent : CinemaActorAction, IRevertable { string textValue; // Options for reverting in editor. [SerializeField] private RevertMode editorRevertMode = RevertMode.Revert; // Options for reverting during runtime. [SerializeField] private RevertMode runtimeRevertMode = RevertMode.Revert; /// /// Cache the state of all actors related to this event. /// /// public RevertInfo[] CacheState() { List actors = new List(GetActors()); List reverts = new List(); for (int i = 0; i < actors.Count; i++) { Transform go = actors[i]; if (go != null) { Text txt = go.GetComponentInChildren(); if (txt != null) { reverts.Add(new RevertInfo(this, txt, "text", txt.text)); } } } return reverts.ToArray(); } public override void Trigger(GameObject actor) { textValue= actor.GetComponentInChildren().text; } public override void SetTime(GameObject actor, float time, float deltaTime) { if (actor != null) if (time > 0 && time <= Duration) UpdateTime(actor, time, deltaTime); } public override void UpdateTime(GameObject actor, float runningTime, float deltaTime) { float transition = runningTime / Duration; int numericalValue; if (textValue!=null) { numericalValue = (int)Mathf.Round(Mathf.Lerp(textValue.Length,0, transition)); actor.GetComponentInChildren().text = textValue.Substring(0, numericalValue); #if UNITY_EDITOR EditorUtility.SetDirty(actor.GetComponentInChildren()); #endif } } public override void End(GameObject actor) { actor.GetComponentInChildren().text = ""; #if UNITY_EDITOR EditorUtility.SetDirty(actor.GetComponentInChildren()); #endif } /// /// Option for choosing when this Event will Revert to initial state in Editor. /// public RevertMode EditorRevertMode { get { return editorRevertMode; } set { editorRevertMode = value; } } /// /// Option for choosing when this Event will Revert to initial state in Runtime. /// public RevertMode RuntimeRevertMode { get { return runtimeRevertMode; } set { runtimeRevertMode = value; } } } }