From ec35022fab0b24690182b42e572fd1eb0415f199 Mon Sep 17 00:00:00 2001 From: chrisgregan Date: Fri, 14 Aug 2015 11:43:48 +0100 Subject: [PATCH] Added Write command and new Text Tag Parser Added new Fungus/UI module Added initial UI tests --- Assets/Fungus/UI.meta | 9 + Assets/Fungus/UI/Editor.meta | 9 + Assets/Fungus/UI/Editor/WriteEditor.cs | 88 + Assets/Fungus/UI/Editor/WriteEditor.cs.meta | 12 + Assets/Fungus/UI/Scripts.meta | 9 + Assets/Fungus/UI/Scripts/Commands.meta | 9 + Assets/Fungus/UI/Scripts/Commands/Write.cs | 109 + .../Fungus/UI/Scripts/Commands/Write.cs.meta | 12 + Assets/Fungus/UI/Scripts/TextTagParser.cs | 298 ++ .../Fungus/UI/Scripts/TextTagParser.cs.meta | 12 + Assets/Fungus/UI/Scripts/Writer.cs | 528 ++ Assets/Fungus/UI/Scripts/Writer.cs.meta | 12 + Assets/Tests.meta | 4 +- Assets/Tests/UI.meta | 9 + Assets/Tests/UI/Audio.meta | 9 + Assets/Tests/UI/Audio/Beep.wav | Bin 0 -> 38400 bytes Assets/Tests/UI/Audio/Beep.wav.meta | 21 + Assets/Tests/UI/Editor.meta | 9 + Assets/Tests/UI/Editor/TextTagParserTests.cs | 206 + .../UI/Editor/TextTagParserTests.cs.meta | 12 + Assets/Tests/UI/FakeWriterInput.cs | 23 + Assets/Tests/UI/FakeWriterInput.cs.meta | 12 + Assets/Tests/UI/Sprites.meta | 9 + Assets/Tests/UI/Sprites/RotationTest.psd | Bin 0 -> 61826 bytes Assets/Tests/UI/Sprites/RotationTest.psd.meta | 55 + Assets/Tests/UI/TestFlags.cs | 9 + Assets/Tests/UI/TestFlags.cs.meta | 12 + Assets/Tests/UI/TextTests.unity | 4520 +++++++++++++++++ Assets/Tests/UI/TextTests.unity.meta | 8 + 29 files changed, 6023 insertions(+), 2 deletions(-) create mode 100644 Assets/Fungus/UI.meta create mode 100644 Assets/Fungus/UI/Editor.meta create mode 100644 Assets/Fungus/UI/Editor/WriteEditor.cs create mode 100644 Assets/Fungus/UI/Editor/WriteEditor.cs.meta create mode 100644 Assets/Fungus/UI/Scripts.meta create mode 100644 Assets/Fungus/UI/Scripts/Commands.meta create mode 100644 Assets/Fungus/UI/Scripts/Commands/Write.cs create mode 100644 Assets/Fungus/UI/Scripts/Commands/Write.cs.meta create mode 100644 Assets/Fungus/UI/Scripts/TextTagParser.cs create mode 100644 Assets/Fungus/UI/Scripts/TextTagParser.cs.meta create mode 100644 Assets/Fungus/UI/Scripts/Writer.cs create mode 100644 Assets/Fungus/UI/Scripts/Writer.cs.meta create mode 100644 Assets/Tests/UI.meta create mode 100644 Assets/Tests/UI/Audio.meta create mode 100644 Assets/Tests/UI/Audio/Beep.wav create mode 100644 Assets/Tests/UI/Audio/Beep.wav.meta create mode 100644 Assets/Tests/UI/Editor.meta create mode 100644 Assets/Tests/UI/Editor/TextTagParserTests.cs create mode 100644 Assets/Tests/UI/Editor/TextTagParserTests.cs.meta create mode 100644 Assets/Tests/UI/FakeWriterInput.cs create mode 100644 Assets/Tests/UI/FakeWriterInput.cs.meta create mode 100644 Assets/Tests/UI/Sprites.meta create mode 100644 Assets/Tests/UI/Sprites/RotationTest.psd create mode 100644 Assets/Tests/UI/Sprites/RotationTest.psd.meta create mode 100644 Assets/Tests/UI/TestFlags.cs create mode 100644 Assets/Tests/UI/TestFlags.cs.meta create mode 100644 Assets/Tests/UI/TextTests.unity create mode 100644 Assets/Tests/UI/TextTests.unity.meta diff --git a/Assets/Fungus/UI.meta b/Assets/Fungus/UI.meta new file mode 100644 index 00000000..0bbf47b0 --- /dev/null +++ b/Assets/Fungus/UI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 71839549e49ad422ba0be670a2d9e8f3 +folderAsset: yes +timeCreated: 1435850993 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Fungus/UI/Editor.meta b/Assets/Fungus/UI/Editor.meta new file mode 100644 index 00000000..0f6bb93d --- /dev/null +++ b/Assets/Fungus/UI/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7ebd428fad0b74343aa1bf752f8f05a1 +folderAsset: yes +timeCreated: 1438002256 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Fungus/UI/Editor/WriteEditor.cs b/Assets/Fungus/UI/Editor/WriteEditor.cs new file mode 100644 index 00000000..3154a3f5 --- /dev/null +++ b/Assets/Fungus/UI/Editor/WriteEditor.cs @@ -0,0 +1,88 @@ +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using Rotorz.ReorderableList; + +namespace Fungus +{ + + [CustomEditor (typeof(Write))] + public class WriteEditor : CommandEditor + { + static public bool showTagHelp; + + protected SerializedProperty textObjectProp; + protected SerializedProperty textProp; + protected SerializedProperty clearTextProp; + protected SerializedProperty textColorProp; + protected SerializedProperty setAlphaProp; + protected SerializedProperty setColorProp; + protected SerializedProperty waitUntilFinishedProp; + + static public void DrawTagHelpLabel() + { + string tagsText = ""; + tagsText += "\n"; + tagsText += TextTagParser.GetTagHelp(); + + float pixelHeight = EditorStyles.miniLabel.CalcHeight(new GUIContent(tagsText), EditorGUIUtility.currentViewWidth); + EditorGUILayout.SelectableLabel(tagsText, GUI.skin.GetStyle("HelpBox"), GUILayout.MinHeight(pixelHeight)); + } + + protected virtual void OnEnable() + { + textObjectProp = serializedObject.FindProperty("textObject"); + textProp = serializedObject.FindProperty("text"); + clearTextProp = serializedObject.FindProperty("clearText"); + textColorProp = serializedObject.FindProperty("textColor"); + setAlphaProp = serializedObject.FindProperty("setAlpha"); + setColorProp = serializedObject.FindProperty("setColor"); + waitUntilFinishedProp = serializedObject.FindProperty("waitUntilFinished"); + } + + public override void DrawCommandGUI() + { + serializedObject.Update(); + + EditorGUILayout.PropertyField(textObjectProp); + EditorGUILayout.PropertyField(textProp); + + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button(new GUIContent("Text Tag Help", "View available tags"), new GUIStyle(EditorStyles.miniButton))) + { + showTagHelp = !showTagHelp; + } + EditorGUILayout.EndHorizontal(); + + if (showTagHelp) + { + DrawTagHelpLabel(); + } + + EditorGUILayout.PropertyField(clearTextProp); + + EditorGUILayout.PropertyField(textColorProp); + switch ((Write.TextColor)textColorProp.enumValueIndex) + { + case Write.TextColor.Default: + break; + case Write.TextColor.SetVisible: + break; + case Write.TextColor.SetAlpha: + EditorGUILayout.PropertyField(setAlphaProp); + break; + case Write.TextColor.SetColor: + EditorGUILayout.PropertyField(setColorProp); + break; + } + + EditorGUILayout.PropertyField(waitUntilFinishedProp); + + serializedObject.ApplyModifiedProperties(); + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/UI/Editor/WriteEditor.cs.meta b/Assets/Fungus/UI/Editor/WriteEditor.cs.meta new file mode 100644 index 00000000..888710ea --- /dev/null +++ b/Assets/Fungus/UI/Editor/WriteEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 208d7ec04cbeb4939ab57abf81810ced +timeCreated: 1438002269 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Fungus/UI/Scripts.meta b/Assets/Fungus/UI/Scripts.meta new file mode 100644 index 00000000..040442e5 --- /dev/null +++ b/Assets/Fungus/UI/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 26c5ee956235e48f18c9a7d6ad86a3eb +folderAsset: yes +timeCreated: 1435851000 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Fungus/UI/Scripts/Commands.meta b/Assets/Fungus/UI/Scripts/Commands.meta new file mode 100644 index 00000000..083db131 --- /dev/null +++ b/Assets/Fungus/UI/Scripts/Commands.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a7a410254d340428085aaf0e66b494fd +folderAsset: yes +timeCreated: 1435851006 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Fungus/UI/Scripts/Commands/Write.cs b/Assets/Fungus/UI/Scripts/Commands/Write.cs new file mode 100644 index 00000000..46558203 --- /dev/null +++ b/Assets/Fungus/UI/Scripts/Commands/Write.cs @@ -0,0 +1,109 @@ +using UnityEngine; +using UnityEngine.UI; +using System; +using System.Collections; +using UnityEngine.Serialization; + +namespace Fungus +{ + [CommandInfo("UI", + "Write", + "Writes content to a UI Text or Text Mesh object.")] + + [AddComponentMenu("")] + public class Write : Command + { + [Tooltip("Text object to set text on. Text, Input Field and Text Mesh objects are supported.")] + public GameObject textObject; + + [Tooltip("String value to assign to the text object")] + public StringData text; + + public bool clearText = true; + + public bool waitUntilFinished = true; + + public enum TextColor + { + Default, + SetVisible, + SetAlpha, + SetColor + } + + public TextColor textColor = TextColor.Default; + + public FloatData setAlpha = new FloatData(1f); + + public ColorData setColor = new ColorData(Color.white); + + public override void OnEnter() + { + if (textObject == null) + { + Continue(); + return; + } + + Writer writer = FindWriter(textObject); + if (writer == null) + { + Continue(); + return; + } + + switch (textColor) + { + case TextColor.SetAlpha: + writer.SetTextAlpha(setAlpha); + break; + case TextColor.SetColor: + writer.SetTextColor(setColor); + break; + case TextColor.SetVisible: + writer.SetTextAlpha(1f); + break; + } + + Flowchart flowchart = GetFlowchart(); + string newText = flowchart.SubstituteVariables(text.Value); + + if (!waitUntilFinished) + { + writer.Write(newText, clearText); + Continue(); + } + else + { + writer.Write(newText, clearText, () => { Continue (); } ); + } + } + + public override string GetSummary() + { + if (textObject != null) + { + return textObject.name + " : " + text.Value; + } + + return "Error: No text object selected"; + } + + public override Color GetButtonColor() + { + return new Color32(235, 191, 217, 255); + } + + protected Writer FindWriter(GameObject textObject) + { + Writer writer = textObject.GetComponent(); + if (writer == null) + { + writer = textObject.AddComponent() as Writer; + } + + return writer; + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/UI/Scripts/Commands/Write.cs.meta b/Assets/Fungus/UI/Scripts/Commands/Write.cs.meta new file mode 100644 index 00000000..5a76fd5e --- /dev/null +++ b/Assets/Fungus/UI/Scripts/Commands/Write.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ad2261dbe44de43a980e6f7c77c88f7f +timeCreated: 1437682443 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Fungus/UI/Scripts/TextTagParser.cs b/Assets/Fungus/UI/Scripts/TextTagParser.cs new file mode 100644 index 00000000..eb7b211e --- /dev/null +++ b/Assets/Fungus/UI/Scripts/TextTagParser.cs @@ -0,0 +1,298 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +namespace Fungus +{ + + public class TextTagParser + { + public enum TokenType + { + Invalid, + Words, // A string of words + BoldStart, // b + BoldEnd, // /b + ItalicStart, // i + ItalicEnd, // /i + ColorStart, // color=red + ColorEnd, // /color + Wait, // w, w=0.5 + WaitForInputNoClear, // wi + WaitForInputAndClear, // wc + WaitOnPunctuationStart, // wp, wp=0.5 + WaitOnPunctuationEnd, // /wp + Clear, // c + SpeedStart, // s, s=60 + SpeedEnd, // /s + Exit, // x + Message, // m=MessageName + VerticalPunch, // {vpunch=0.5} + HorizontalPunch, // {hpunch=0.5} + Punch, // {shake=0.5} + Flash, // {flash=0.5} + Audio, // {audio=Sound} + AudioLoop, // {audioloop=Sound} + AudioPause, // {audiopause=Sound} + AudioStop // {audiostop=Sound} + } + + public class Token + { + public TokenType type = TokenType.Invalid; + public string param = ""; + } + + public static string GetTagHelp() + { + return "" + + "\t{b} Bold Text {/b}\n" + + "\t{i} Italic Text {/i}\n" + + "\t{color=red} Color Text (color){/color}\n" + + "\n" + + "\t{s}, {s=60} Writing speed (chars per sec){/s}\n" + + "\t{w}, {w=0.5} Wait (seconds)\n" + + "\t{wi} Wait for input\n" + + "\t{wc} Wait for input and clear\n" + + "\t{wp}, {wp=0.5} Wait on punctuation (seconds){/wp}\n" + + "\t{c} Clear\n" + + "\t{x} Exit, advance to the next command without waiting for input\n" + + "\n" + + "\t{vpunch=0.5} Vertically punch screen (intensity)\n" + + "\t{hpunch=0.5} Horizontally punch screen (intensity)\n" + + "\t{shake=1} Shake screen (intensity)\n" + + "\t{shiver=1} Shiver screen (intensity)\n" + + "\t{flash=0.5} Flash screen (duration)\n" + + "\n" + + "\t{audio=AudioObjectName} Play Audio Once\n" + + "\t{audioloop=AudioObjectName} Play Audio Loop\n" + + "\t{audiopause=AudioObjectName} Pause Audio\n" + + "\t{audiostop=AudioObjectName} Stop Audio\n" + + "\n" + + "\t{m=MessageName} Broadcast message\n" + + "\t{$VarName} Substitute variable"; + } + + public virtual List Tokenize(string storyText) + { + List tokens = new List(); + + string pattern = @"\{.*?\}"; + Regex myRegex = new Regex(pattern); + + Match m = myRegex.Match(storyText); // m is the first match + + int position = 0; + while (m.Success) + { + // Get bit leading up to tag + string preText = storyText.Substring(position, m.Index - position); + string tagText = m.Value; + + if (preText != "") + { + AddWordsToken(tokens, preText); + } + AddTagToken(tokens, tagText); + + position = m.Index + tagText.Length; + m = m.NextMatch(); + } + + if (position < storyText.Length) + { + string postText = storyText.Substring(position, storyText.Length - position); + if (postText.Length > 0) + { + AddWordsToken(tokens, postText); + } + } + + // Remove all leading whitespace & newlines after a {c} or {wc} tag + // These characters are usually added for legibility when editing, but are not + // desireable when viewing the text in game. + bool trimLeading = false; + foreach (Token token in tokens) + { + if (trimLeading && + token.type == TokenType.Words) + { + token.param.TrimStart(' ', '\t', '\r', '\n'); + } + + if (token.type == TokenType.Clear || + token.type == TokenType.WaitForInputAndClear) + { + trimLeading = true; + } + else + { + trimLeading = false; + } + } + + return tokens; + } + + protected virtual void AddWordsToken(List tokenList, string words) + { + Token token = new Token(); + token.type = TokenType.Words; + token.param = words; + tokenList.Add(token); + } + + protected virtual void AddTagToken(List tokenList, string tagText) + { + if (tagText.Length < 3 || + tagText.Substring(0,1) != "{" || + tagText.Substring(tagText.Length - 1,1) != "}") + { + return; + } + + string tag = tagText.Substring(1, tagText.Length - 2); + + TokenType type = TokenType.Invalid; + string paramText = ExtractParameter(tag); + + if (tag == "b") + { + type = TokenType.BoldStart; + } + else if (tag == "/b") + { + type = TokenType.BoldEnd; + } + else if (tag == "i") + { + type = TokenType.ItalicStart; + } + else if (tag == "/i") + { + type = TokenType.ItalicEnd; + } + else if (tag.StartsWith("color=")) + { + type = TokenType.ColorStart; + } + else if (tag == "/color") + { + type = TokenType.ColorEnd; + } + else if (tag == "wi") + { + type = TokenType.WaitForInputNoClear; + } + if (tag == "wc") + { + type = TokenType.WaitForInputAndClear; + } + else if (tag.StartsWith("wp=")) + { + type = TokenType.WaitOnPunctuationStart; + } + else if (tag == "wp") + { + type = TokenType.WaitOnPunctuationStart; + } + else if (tag == "/wp") + { + type = TokenType.WaitOnPunctuationEnd; + } + else if (tag.StartsWith("w=")) + { + type = TokenType.Wait; + } + else if (tag == "w") + { + type = TokenType.Wait; + } + else if (tag == "c") + { + type = TokenType.Clear; + } + else if (tag.StartsWith("s=")) + { + type = TokenType.SpeedStart; + } + else if (tag == "s") + { + type = TokenType.SpeedStart; + } + else if (tag == "/s") + { + type = TokenType.SpeedEnd; + } + else if (tag == "x") + { + type = TokenType.Exit; + } + else if (tag.StartsWith("m=")) + { + type = TokenType.Message; + } + else if (tag.StartsWith("vpunch") || + tag.StartsWith("vpunch=")) + { + type = TokenType.VerticalPunch; + } + else if (tag.StartsWith("hpunch") || + tag.StartsWith("hpunch=")) + { + type = TokenType.HorizontalPunch; + } + else if (tag.StartsWith("punch") || + tag.StartsWith("punch=")) + { + type = TokenType.Punch; + } + else if (tag.StartsWith("flash") || + tag.StartsWith("flash=")) + { + type = TokenType.Flash; + } + else if (tag.StartsWith("audio=")) + { + type = TokenType.Audio; + } + else if (tag.StartsWith("audioloop=")) + { + type = TokenType.AudioLoop; + } + else if (tag.StartsWith("audiopause=")) + { + type = TokenType.AudioPause; + } + else if (tag.StartsWith("audiostop=")) + { + type = TokenType.AudioStop; + } + + if (type != TokenType.Invalid) + { + Token token = new Token(); + token.type = type; + token.param = paramText.Trim(); + tokenList.Add(token); + } + else + { + Debug.LogWarning("Invalid text tag " + tag); + } + } + + protected virtual string ExtractParameter(string input) + { + int index = input.IndexOf('='); + if (index == -1) + { + return ""; + } + + return input.Substring(index +1); + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/UI/Scripts/TextTagParser.cs.meta b/Assets/Fungus/UI/Scripts/TextTagParser.cs.meta new file mode 100644 index 00000000..4f8b1757 --- /dev/null +++ b/Assets/Fungus/UI/Scripts/TextTagParser.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6b519a23a7c0e4044b9b680230f51c4f +timeCreated: 1439546126 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Fungus/UI/Scripts/Writer.cs b/Assets/Fungus/UI/Scripts/Writer.cs new file mode 100644 index 00000000..e5073e24 --- /dev/null +++ b/Assets/Fungus/UI/Scripts/Writer.cs @@ -0,0 +1,528 @@ +using UnityEngine; +using UnityEngine.UI; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Fungus +{ + + public class Writer : MonoBehaviour + { + public float writingSpeed = 60; + public float punctuationPause = 0.25f; + public Color hiddenTextColor = new Color(1,1,1,0); + public bool writeWholeWords = false; + + protected float currentWritingSpeed; + protected float currentPunctuationPause; + protected Text textUI; + protected InputField inputField; + protected TextMesh textMesh; + protected bool boldActive = false; + protected bool italicActive = false; + protected bool colorActive = false; + protected string colorText = ""; + protected bool inputFlag; + + public string text + { + get + { + if (textUI != null) + { + return textUI.text; + } + else if (inputField != null) + { + return inputField.text; + } + else if (textMesh != null) + { + return textMesh.text; + } + return ""; + } + + set + { + if (textUI != null) + { + textUI.text = value; + } + else if (inputField != null) + { + inputField.text = value; + } + else if (textMesh != null) + { + textMesh.text = value; + } + } + } + + protected virtual void Awake() + { + textUI = GetComponent(); + inputField = GetComponent(); + textMesh = GetComponent(); + } + + public virtual bool HasTextObject() + { + return (textUI != null || inputField != null || textMesh != null); + } + + public virtual bool SupportsRichText() + { + if (textUI != null) + { + return textUI.supportRichText; + } + if (inputField != null) + { + return false; + } + if (textMesh != null) + { + return textMesh.richText; + } + return false; + } + + protected virtual string OpenMarkup() + { + string tagText = ""; + + if (SupportsRichText()) + { + if (colorActive) + { + tagText += ""; + } + if (boldActive) + { + tagText += ""; + } + if (italicActive) + { + tagText += ""; + } + } + + return tagText; + } + + protected virtual string CloseMarkup() + { + string closeText = ""; + + if (SupportsRichText()) + { + if (italicActive) + { + closeText += ""; + } + if (boldActive) + { + closeText += ""; + } + if (colorActive) + { + closeText += ""; + } + } + + return closeText; + } + + protected virtual void Update() + { + if (Input.anyKeyDown) + { + SetInputFlag(); + } + } + + public virtual void SetTextColor(Color textColor) + { + if (textUI != null) + { + textUI.color = textColor; + } + else if (inputField != null) + { + if (inputField.textComponent != null) + { + inputField.textComponent.color = textColor; + } + } + else if (textMesh != null) + { + textMesh.color = textColor; + } + } + + public virtual void SetTextAlpha(float textAlpha) + { + if (textUI != null) + { + Color tempColor = textUI.color; + tempColor.a = textAlpha; + textUI.color = tempColor; + } + else if (inputField != null) + { + if (inputField.textComponent != null) + { + Color tempColor = inputField.textComponent.color; + tempColor.a = textAlpha; + inputField.textComponent.color = tempColor; + } + } + else if (textMesh != null) + { + Color tempColor = textMesh.color; + tempColor.a = textAlpha; + textMesh.color = tempColor; + } + } + + public virtual void Write(string content, bool clear, Action onComplete = null) + { + if (clear) + { + this.text = ""; + } + + if (!HasTextObject()) + { + return; + } + + TextTagParser tagParser = new TextTagParser(); + List tokens = tagParser.Tokenize(content); + + StartCoroutine(ProcessTokens(tokens, onComplete)); + } + + protected virtual IEnumerator ProcessTokens(List tokens, Action onComplete) + { + text = ""; + + // Reset control members + boldActive = false; + italicActive = false; + colorActive = false; + colorText = ""; + currentPunctuationPause = punctuationPause; + currentWritingSpeed = writingSpeed; + + foreach (TextTagParser.Token token in tokens) + { + switch (token.type) + { + case TextTagParser.TokenType.Words: + yield return StartCoroutine(DoWords(token.param)); + break; + + case TextTagParser.TokenType.BoldStart: + boldActive = true; + break; + + case TextTagParser.TokenType.BoldEnd: + boldActive = false; + break; + + case TextTagParser.TokenType.ItalicStart: + italicActive = true; + break; + + case TextTagParser.TokenType.ItalicEnd: + italicActive = false; + break; + + case TextTagParser.TokenType.ColorStart: + colorActive = true; + colorText = token.param; + break; + + case TextTagParser.TokenType.ColorEnd: + colorActive = false; + break; + + case TextTagParser.TokenType.Wait: + yield return StartCoroutine(DoWait(token.param)); + break; + + case TextTagParser.TokenType.WaitForInputNoClear: + yield return StartCoroutine(DoWaitForInput(false)); + break; + + case TextTagParser.TokenType.WaitForInputAndClear: + yield return StartCoroutine(DoWaitForInput(true)); + break; + + case TextTagParser.TokenType.WaitOnPunctuationStart: + if (!Single.TryParse(token.param, out currentPunctuationPause)) + { + currentPunctuationPause = punctuationPause; + } + break; + + case TextTagParser.TokenType.WaitOnPunctuationEnd: + currentPunctuationPause = punctuationPause; + break; + + case TextTagParser.TokenType.Clear: + text = ""; + break; + + case TextTagParser.TokenType.SpeedStart: + if (!Single.TryParse(token.param, out currentWritingSpeed)) + { + currentWritingSpeed = writingSpeed; + } + break; + + case TextTagParser.TokenType.SpeedEnd: + currentWritingSpeed = writingSpeed; + break; + + case TextTagParser.TokenType.Exit: + yield break; + + case TextTagParser.TokenType.Message: + Flowchart.BroadcastFungusMessage(token.param); + break; + + case TextTagParser.TokenType.VerticalPunch: + float vintensity; + if (!Single.TryParse(token.param, out vintensity)) + { + vintensity = 10f; + } + Punch(new Vector3(0, vintensity, 0), 0.5f); + break; + + case TextTagParser.TokenType.HorizontalPunch: + float hintensity; + if (!Single.TryParse(token.param, out hintensity)) + { + hintensity = 10f; + } + Punch(new Vector3(hintensity, 0, 0), 0.5f); + break; + + case TextTagParser.TokenType.Punch: + float intensity; + if (!Single.TryParse(token.param, out intensity)) + { + intensity = 10f; + } + Punch(new Vector3(intensity, intensity, 0), 0.5f); + break; + + case TextTagParser.TokenType.Flash: + float flashDuration; + if (!Single.TryParse(token.param, out flashDuration)) + { + flashDuration = 0.2f; + } + Flash(flashDuration); + break; + + case TextTagParser.TokenType.Audio: + { + AudioSource audioSource = FindAudio(token.param); + if (audioSource != null) + { + audioSource.PlayOneShot(audioSource.clip); + } + } + break; + + case TextTagParser.TokenType.AudioLoop: + { + AudioSource audioSource = FindAudio(token.param); + if (audioSource != null) + { + audioSource.Play(); + audioSource.loop = true; + } + } + break; + + case TextTagParser.TokenType.AudioPause: + { + AudioSource audioSource = FindAudio(token.param); + if (audioSource != null) + { + audioSource.Pause(); + } + } + break; + + case TextTagParser.TokenType.AudioStop: + { + AudioSource audioSource = FindAudio(token.param); + if (audioSource != null) + { + audioSource.Stop(); + } + } + break; + + } + + inputFlag = false; + } + + if (onComplete != null) + { + onComplete(); + } + } + + protected virtual IEnumerator DoWords(string param) + { + string startText = text; + string openText = OpenMarkup(); + string closeText = CloseMarkup(); + + float timeAccumulator = Time.deltaTime; + + Color32 c = hiddenTextColor; + + string hiddenColor = String.Format("#{0:X2}{1:X2}{2:X2}{3:X2}", c.r, c.g, c.b, c.a); + + for (int i = 0; i < param.Length; ++i) + { + string left = ""; + string right = ""; + + if (writeWholeWords) + { + // Look ahead to find next whitespace or end of string + for (int j = i; j < param.Length; ++j) + { + if (Char.IsWhiteSpace(param[j]) || + j == param.Length - 1) + { + left = param.Substring(0, j + 1); + right = param.Substring(j + 1, param.Length - j - 1); + break; + } + } + } + else + { + left = param.Substring(0, i + 1); + right = param.Substring(i + 1); + } + + string tempText = startText + openText + left + closeText; + + // Make right hand side text invisible + if (right.Length > 0) + { + tempText += "" + right + ""; + } + + text = tempText; + + if (left.Length > 0 && + IsPunctuation(left.Substring(left.Length - 1)[0])) + { + yield return new WaitForSeconds(currentPunctuationPause); + } + + if (currentWritingSpeed > 0f) + { + if (timeAccumulator > 0f) + { + timeAccumulator -= 1f / currentWritingSpeed; + } + else + { + yield return new WaitForSeconds(1f / currentWritingSpeed); + } + } + } + } + + public virtual void SetInputFlag() + { + inputFlag = true; + } + + public virtual string GetTagHelp() + { + return ""; + } + + protected virtual IEnumerator DoWait(string param) + { + float duration = 1f; + if (!Single.TryParse(param, out duration)) + { + duration = 1f; + } + + yield return new WaitForSeconds(duration); + } + + protected virtual IEnumerator DoWaitForInput(bool clear) + { + while (!inputFlag) + { + yield return null; + } + + inputFlag = false; + + if (clear) + { + textUI.text = ""; + } + } + + protected virtual bool IsPunctuation(char character) + { + return character == '.' || + character == '?' || + character == '!' || + character == ',' || + character == ':' || + character == ';' || + character == ')'; + } + + protected virtual void Punch(Vector3 axis, float time) + { + iTween.ShakePosition(this.gameObject, axis, time); + } + + protected virtual void Flash(float duration) + { + CameraController cameraController = CameraController.GetInstance(); + cameraController.screenFadeTexture = CameraController.CreateColorTexture(new Color(1f,1f,1f,1f), 32, 32); + cameraController.Fade(1f, duration, delegate { + cameraController.screenFadeTexture = CameraController.CreateColorTexture(new Color(1f,1f,1f,1f), 32, 32); + cameraController.Fade(0f, duration, null); + }); + } + + protected virtual AudioSource FindAudio(string audioObjectName) + { + GameObject go = GameObject.Find(audioObjectName); + if (go == null) + { + return null; + } + + return go.GetComponent(); + } + } + +} diff --git a/Assets/Fungus/UI/Scripts/Writer.cs.meta b/Assets/Fungus/UI/Scripts/Writer.cs.meta new file mode 100644 index 00000000..d55169dc --- /dev/null +++ b/Assets/Fungus/UI/Scripts/Writer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a676940fce6344af1a70043b089a6c14 +timeCreated: 1437427397 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests.meta b/Assets/Tests.meta index 2fd54eeb..f54ecfac 100644 --- a/Assets/Tests.meta +++ b/Assets/Tests.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 3d918473a457f402f958b5d4dcad242d +guid: f23bed438013a47438010dafdc996ae4 folderAsset: yes -timeCreated: 1438859813 +timeCreated: 1437397391 licenseType: Free DefaultImporter: userData: diff --git a/Assets/Tests/UI.meta b/Assets/Tests/UI.meta new file mode 100644 index 00000000..a52fc68f --- /dev/null +++ b/Assets/Tests/UI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f204ed91830f24eb086dca53a4ecac22 +folderAsset: yes +timeCreated: 1439480503 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/UI/Audio.meta b/Assets/Tests/UI/Audio.meta new file mode 100644 index 00000000..73dde062 --- /dev/null +++ b/Assets/Tests/UI/Audio.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ed7d38898531446fca43d7ff3d9a5c35 +folderAsset: yes +timeCreated: 1437657363 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/UI/Audio/Beep.wav b/Assets/Tests/UI/Audio/Beep.wav new file mode 100644 index 0000000000000000000000000000000000000000..381015528e84768bf74e855acafa4c84bc26b363 GIT binary patch literal 38400 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 literal 0 HcmV?d00001 diff --git a/Assets/Tests/UI/Audio/Beep.wav.meta b/Assets/Tests/UI/Audio/Beep.wav.meta new file mode 100644 index 00000000..a4fb4ea6 --- /dev/null +++ b/Assets/Tests/UI/Audio/Beep.wav.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: 58cb220e0c6c34a1280967cdc9271d68 +timeCreated: 1437657437 +licenseType: Free +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/UI/Editor.meta b/Assets/Tests/UI/Editor.meta new file mode 100644 index 00000000..e664709c --- /dev/null +++ b/Assets/Tests/UI/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 27691b3c5e5044c968559d92599fae5e +folderAsset: yes +timeCreated: 1437398356 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/UI/Editor/TextTagParserTests.cs b/Assets/Tests/UI/Editor/TextTagParserTests.cs new file mode 100644 index 00000000..41f754a9 --- /dev/null +++ b/Assets/Tests/UI/Editor/TextTagParserTests.cs @@ -0,0 +1,206 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework; +using UnityEngine; + +using Fungus; + +[TestFixture] +public class TextTagParserTests +{ + [Test] + public void TextTagParser_Parser() + { + var textTagParser = new TextTagParser(); + + // Parse an example string, generate correct sequence of tags + List tokens = textTagParser.Tokenize("Words " + + "{b}bold test{/b}" + + "{i}italic test{/i}" + + "{color=red}color test{/color}" + + "{w}{w=0.5}" + + "{wi}{wc}" + + "{wp}{wp=0.5}{/wp}" + + "{c}" + + "{s}{s=60}{/s}" + + "{x}{m=Message}" + + "{vpunch=0.5}" + + "{hpunch=0.5}" + + "{punch=0.5}" + + "{flash=0.5}" + + "{audio=Sound}" + + "{audioloop=Sound}" + + "{audiopause=Sound}" + + "{audiostop=Sound}"); + + int i = 0; + Assert.That(tokens[i].type == TextTagParser.TokenType.Words); + Assert.That(tokens[i].param == "Words "); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.BoldStart); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Words); + Assert.That(tokens[i].param == "bold test"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.BoldEnd); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.ItalicStart); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Words); + Assert.That(tokens[i].param == "italic test"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.ItalicEnd); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.ColorStart); + Assert.That(tokens[i].param == "red"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Words); + Assert.That(tokens[i].param == "color test"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.ColorEnd); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Wait); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Wait); + Assert.That(tokens[i].param == "0.5"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.WaitForInputNoClear); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.WaitForInputAndClear); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.WaitOnPunctuationStart); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.WaitOnPunctuationStart); + Assert.That(tokens[i].param == "0.5"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.WaitOnPunctuationEnd); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Clear); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.SpeedStart); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.SpeedStart); + Assert.That(tokens[i].param == "60"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.SpeedEnd); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Exit); + Assert.That(tokens[i].param == ""); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Message); + Assert.That(tokens[i].param == "Message"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.VerticalPunch); + Assert.That(tokens[i].param == "0.5"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.HorizontalPunch); + Assert.That(tokens[i].param == "0.5"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Punch); + Assert.That(tokens[i].param == "0.5"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Flash); + Assert.That(tokens[i].param == "0.5"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Audio); + Assert.That(tokens[i].param == "Sound"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.AudioLoop); + Assert.That(tokens[i].param == "Sound"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.AudioPause); + Assert.That(tokens[i].param == "Sound"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.AudioStop); + Assert.That(tokens[i].param == "Sound"); + + Assert.That(tokens.Count == 31); + } + + [Test] + public void TextTagParser_AudioWaitBug() + { + var textTagParser = new TextTagParser(); + + // Parse an example string, generate correct sequence of tags + List tokens = textTagParser.Tokenize("Play sound{audio=BeepSound}{w=1} Play loop{audioloop=BeepSound}{w=3} Stop{audiostop=BeepSound}"); + + int i = 0; + Assert.That(tokens[i].type == TextTagParser.TokenType.Words); + Assert.That(tokens[i].param == "Play sound"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Audio); + Assert.That(tokens[i].param == "BeepSound"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Wait); + Assert.That(tokens[i].param == "1"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Words); + Assert.That(tokens[i].param == " Play loop"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.AudioLoop); + Assert.That(tokens[i].param == "BeepSound"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Wait); + Assert.That(tokens[i].param == "3"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.Words); + Assert.That(tokens[i].param == " Stop"); + + i++; + Assert.That(tokens[i].type == TextTagParser.TokenType.AudioStop); + Assert.That(tokens[i].param == "BeepSound"); + + Assert.That(tokens.Count == 8); + } + +} diff --git a/Assets/Tests/UI/Editor/TextTagParserTests.cs.meta b/Assets/Tests/UI/Editor/TextTagParserTests.cs.meta new file mode 100644 index 00000000..9e54d1e9 --- /dev/null +++ b/Assets/Tests/UI/Editor/TextTagParserTests.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a9cea7ad00f8a4d8aa33b09722792171 +timeCreated: 1436968375 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/UI/FakeWriterInput.cs b/Assets/Tests/UI/FakeWriterInput.cs new file mode 100644 index 00000000..32b863e6 --- /dev/null +++ b/Assets/Tests/UI/FakeWriterInput.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using System.Collections; + +namespace Fungus +{ + + public class FakeWriterInput : MonoBehaviour + { + public float delay; + + void Start () + { + Invoke("DoFakeInput", delay); + } + + void DoFakeInput() + { + Writer writer = GetComponent(); + writer.SetInputFlag(); + } + } + +} \ No newline at end of file diff --git a/Assets/Tests/UI/FakeWriterInput.cs.meta b/Assets/Tests/UI/FakeWriterInput.cs.meta new file mode 100644 index 00000000..d934407d --- /dev/null +++ b/Assets/Tests/UI/FakeWriterInput.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21440b2111dd24f8e95aa8fc983c53dd +timeCreated: 1437489220 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/UI/Sprites.meta b/Assets/Tests/UI/Sprites.meta new file mode 100644 index 00000000..e95f1b57 --- /dev/null +++ b/Assets/Tests/UI/Sprites.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f7526ee6ce9194a858b35171b9173bdc +folderAsset: yes +timeCreated: 1438162230 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/UI/Sprites/RotationTest.psd b/Assets/Tests/UI/Sprites/RotationTest.psd new file mode 100644 index 0000000000000000000000000000000000000000..587ea91423fa0adc2e61218f36dbae549d93827a GIT binary patch literal 61826 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 gt>NsqhO^%q&VFk+`;E!~eu`~4`|a5Oscolored italic + and bold. Mixed red and bold + and italic not italic not + bold not colored. + compareType: 0 + comparisonType: 4 + ignoreCase: 0 +--- !u!1 &1754111083 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1754111086} + - 23: {fileID: 1754111085} + - 102: {fileID: 1754111084} + - 114: {fileID: 1754111087} + m_Layer: 0 + m_Name: 3DText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!102 &1754111084 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1754111083} + m_Text: Hello world + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 4 + m_FontSize: 0 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1754111085 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1754111083} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_ImportantGI: 0 + m_AutoUVMaxDistance: .5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!4 &1754111086 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1754111083} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: .50999999, y: -1.71000004, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 245735760} + m_RootOrder: 2 +--- !u!114 &1754111087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1754111083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a676940fce6344af1a70043b089a6c14, type: 3} + m_Name: + m_EditorClassIdentifier: + writingSpeed: 60 + punctuationPause: .25 + hiddenTextColor: {r: 1, g: 1, b: 1, a: 0} + writeWholeWords: 0 +--- !u!1 &1845987937 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 142980, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1845987942} + - 114: {fileID: 1845987941} + - 114: {fileID: 1845987940} + - 114: {fileID: 1845987939} + - 114: {fileID: 1845987938} + - 114: {fileID: 1845987946} + - 114: {fileID: 1845987945} + - 114: {fileID: 1845987944} + - 114: {fileID: 1845987943} + - 114: {fileID: 1845987950} + - 114: {fileID: 1845987949} + - 114: {fileID: 1845987948} + - 114: {fileID: 1845987947} + m_Layer: 0 + m_Name: Flowchart + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1845987938 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fcb2f76cb734fa0b54a47f11d6cb20, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1845987939 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_PrefabParentObject: {fileID: 11462346, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d2f6487d21a03404cb21b245f0242e79, type: 3} + m_Name: + m_EditorClassIdentifier: + parentBlock: {fileID: 1845987940} +--- !u!114 &1845987940 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_PrefabParentObject: {fileID: 11433304, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3d3d73aef2cfc4f51abf34ac00241f60, type: 3} + m_Name: + m_EditorClassIdentifier: + nodeRect: + serializedVersion: 2 + x: 68 + y: 69 + width: 120 + height: 40 + itemId: 0 + blockName: Do Test + description: + eventHandler: {fileID: 1845987939} + commandList: + - {fileID: 1845987950} + - {fileID: 1845987949} + - {fileID: 1845987948} + - {fileID: 1845987947} +--- !u!114 &1845987941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 11430050, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a334fe2ffb574b3583ff3b18b4792d3, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 1.0 + scrollPos: {x: 0, y: 0} + variablesScrollPos: {x: 0, y: 0} + variablesExpanded: 1 + blockViewHeight: 280 + zoom: 1 + scrollViewRect: + serializedVersion: 2 + x: -343 + y: -340 + width: 1114 + height: 859 + selectedBlock: {fileID: 1845987940} + selectedCommands: + - {fileID: 1845987947} + variables: + - {fileID: 1845987944} + description: + stepPause: 0 + colorCommands: 1 + hideComponents: 1 + saveSelection: 1 + localizationId: +--- !u!4 &1845987942 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 467082, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1032150759} + m_RootOrder: 3 +--- !u!114 &1845987943 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b9380131a8714e639a8475f6b54e271, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1845987944 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4580f28dd8581476b810b38eea2f1316, type: 3} + m_Name: + m_EditorClassIdentifier: + scope: 0 + key: TestInput + value: +--- !u!114 &1845987945 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fcb2f76cb734fa0b54a47f11d6cb20, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1845987946 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fcb2f76cb734fa0b54a47f11d6cb20, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1845987947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e889853a4ba0b446d97008a78fa4cf1e, type: 3} + m_Name: + m_EditorClassIdentifier: + itemId: 4 + errorMessage: + indentLevel: 0 + targetTextObject: {fileID: 1112601922} + stringVariable: {fileID: 1845987944} + _textObjectObsolete: {fileID: 0} +--- !u!114 &1845987948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78c0367bf08d147bd80b5454de50e9d4, type: 3} + m_Name: + m_EditorClassIdentifier: + itemId: 3 + errorMessage: + indentLevel: 0 + targetTextObject: {fileID: 95196512} + stringData: + stringRef: {fileID: 0} + stringVal: Output text 3 + _textObjectObsolete: {fileID: 0} +--- !u!114 &1845987949 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78c0367bf08d147bd80b5454de50e9d4, type: 3} + m_Name: + m_EditorClassIdentifier: + itemId: 2 + errorMessage: + indentLevel: 0 + targetTextObject: {fileID: 1912867843} + stringData: + stringRef: {fileID: 0} + stringVal: Output text 2 + _textObjectObsolete: {fileID: 0} +--- !u!114 &1845987950 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1845987937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78c0367bf08d147bd80b5454de50e9d4, type: 3} + m_Name: + m_EditorClassIdentifier: + itemId: 1 + errorMessage: + indentLevel: 0 + targetTextObject: {fileID: 1612264386} + stringData: + stringRef: {fileID: 0} + stringVal: Output text 1 + _textObjectObsolete: {fileID: 0} +--- !u!114 &1866177340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2586c8e41f35d2f4fadde53020bf4207, type: 3} + m_Name: + m_EditorClassIdentifier: + go: {fileID: 1032256623} + thisPropertyPath: TestFlags.messageReceived + compareToType: 1 + other: {fileID: 0} + otherPropertyPath: + constantValueGeneric: 1 +--- !u!1 &1912867843 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1912867844} + - 222: {fileID: 1912867847} + - 114: {fileID: 1912867846} + - 114: {fileID: 1912867845} + m_Layer: 5 + m_Name: InputField_Output + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1912867844 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912867843} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 872356302} + - {fileID: 34230113} + m_Father: {fileID: 1518184826} + m_RootOrder: 1 + m_AnchorMin: {x: .5, y: .5} + m_AnchorMax: {x: .5, y: .5} + m_AnchoredPosition: {x: -218.5, y: 172.5} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: .5, y: .5} +--- !u!114 &1912867845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912867843} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1} + m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1} + m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814} + m_ColorMultiplier: 1 + m_FadeDuration: .100000001 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1912867846} + m_TextComponent: {fileID: 34230114} + m_Placeholder: {fileID: 872356303} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_EndEdit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChange: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SelectionColor: {r: .65882355, g: .807843149, b: 1, a: .752941191} + m_Text: + m_CaretBlinkRate: .850000024 +--- !u!114 &1912867846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912867843} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1912867847 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912867843} +--- !u!1 &1920590680 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1920590681} + - 222: {fileID: 1920590685} + - 114: {fileID: 1920590684} + - 114: {fileID: 1920590683} + - 114: {fileID: 1920590682} + m_Layer: 5 + m_Name: PunchAndFlash + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1920590681 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1920590680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1730131643} + m_RootOrder: 6 + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -204} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: .5, y: .5} +--- !u!114 &1920590682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1920590680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8bafa54482a87ac4cbd7ff1bfd1ac93a, type: 3} + m_Name: + m_EditorClassIdentifier: + checkAfterTime: 5 + repeatCheckTime: 0 + repeatEveryTime: 1 + checkAfterFrames: 1 + repeatCheckFrame: 1 + repeatEveryFrame: 1 + hasFailed: 0 + checkMethods: 1 + m_ActionBase: {fileID: 736023540} + checksPerformed: 0 +--- !u!114 &1920590683 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1920590680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a676940fce6344af1a70043b089a6c14, type: 3} + m_Name: + m_EditorClassIdentifier: + writingSpeed: 30 + punctuationPause: .25 + hiddenTextColor: {r: 1, g: 1, b: 1, a: 0} + writeWholeWords: 0 +--- !u!114 &1920590684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1920590680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .196078435, g: .196078435, b: .196078435, a: 1} + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1920590685 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1920590680} +--- !u!114 &1937312508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2586c8e41f35d2f4fadde53020bf4207, type: 3} + m_Name: + m_EditorClassIdentifier: + go: {fileID: 945055421} + thisPropertyPath: AudioSource.isPlaying + compareToType: 1 + other: {fileID: 0} + otherPropertyPath: + constantValueGeneric: 1 +--- !u!114 &1992408041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58783f051e477fd4e93b42ec7a43bb64, type: 3} + m_Name: + m_EditorClassIdentifier: + go: {fileID: 185519269} + thisPropertyPath: Text.text + compareToType: 1 + other: {fileID: 0} + otherPropertyPath: + constantValueGeneric: Test. punctuation? pause .?!,:;) works + compareType: 1 + comparisonType: 4 + ignoreCase: 0 +--- !u!1 &2004095628 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 2004095629} + - 222: {fileID: 2004095632} + - 114: {fileID: 2004095631} + - 114: {fileID: 2004095630} + m_Layer: 5 + m_Name: TextColor_SetColor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2004095629 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2004095628} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1730131643} + m_RootOrder: 12 + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 344.130005, y: -294} + m_SizeDelta: {x: -684.75, y: 30} + m_Pivot: {x: .5, y: .5} +--- !u!114 &2004095630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2004095628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a676940fce6344af1a70043b089a6c14, type: 3} + m_Name: + m_EditorClassIdentifier: + writingSpeed: 30 + punctuationPause: .25 + hiddenTextColor: {r: 1, g: 1, b: 1, a: 0} + writeWholeWords: 0 +--- !u!114 &2004095631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2004095628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0} + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &2004095632 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2004095628} +--- !u!1 &2015818680 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 2015818681} + - 222: {fileID: 2015818684} + - 114: {fileID: 2015818683} + - 114: {fileID: 2015818682} + m_Layer: 5 + m_Name: TextColor_SetAlpha + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2015818681 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2015818680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1730131643} + m_RootOrder: 11 + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 128, y: -294} + m_SizeDelta: {x: -665, y: 30} + m_Pivot: {x: .5, y: .5} +--- !u!114 &2015818682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2015818680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a676940fce6344af1a70043b089a6c14, type: 3} + m_Name: + m_EditorClassIdentifier: + writingSpeed: 30 + punctuationPause: .25 + hiddenTextColor: {r: 1, g: 1, b: 1, a: 0} + writeWholeWords: 0 +--- !u!114 &2015818683 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2015818680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0} + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &2015818684 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2015818680} +--- !u!114 &2015896472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58783f051e477fd4e93b42ec7a43bb64, type: 3} + m_Name: + m_EditorClassIdentifier: + go: {fileID: 95196512} + thisPropertyPath: TextMesh.text + compareToType: 1 + other: {fileID: 0} + otherPropertyPath: + constantValueGeneric: Output text 3 + compareType: 0 + comparisonType: 4 + ignoreCase: 0 diff --git a/Assets/Tests/UI/TextTests.unity.meta b/Assets/Tests/UI/TextTests.unity.meta new file mode 100644 index 00000000..75739ea0 --- /dev/null +++ b/Assets/Tests/UI/TextTests.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f2c5f868588ec472eac0c38ba9de391f +timeCreated: 1439548235 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: