chrisgregan
10 years ago
29 changed files with 6023 additions and 2 deletions
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 71839549e49ad422ba0be670a2d9e8f3 |
||||
folderAsset: yes |
||||
timeCreated: 1435850993 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 7ebd428fad0b74343aa1bf752f8f05a1 |
||||
folderAsset: yes |
||||
timeCreated: 1438002256 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -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(); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 208d7ec04cbeb4939ab57abf81810ced |
||||
timeCreated: 1438002269 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 26c5ee956235e48f18c9a7d6ad86a3eb |
||||
folderAsset: yes |
||||
timeCreated: 1435851000 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: a7a410254d340428085aaf0e66b494fd |
||||
folderAsset: yes |
||||
timeCreated: 1435851006 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -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<Writer>(); |
||||
if (writer == null) |
||||
{ |
||||
writer = textObject.AddComponent<Writer>() as Writer; |
||||
} |
||||
|
||||
return writer; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2 |
||||
guid: ad2261dbe44de43a980e6f7c77c88f7f |
||||
timeCreated: 1437682443 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -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<Token> Tokenize(string storyText) |
||||
{ |
||||
List<Token> tokens = new List<Token>(); |
||||
|
||||
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<Token> tokenList, string words) |
||||
{ |
||||
Token token = new Token(); |
||||
token.type = TokenType.Words; |
||||
token.param = words; |
||||
tokenList.Add(token); |
||||
} |
||||
|
||||
protected virtual void AddTagToken(List<Token> 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); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 6b519a23a7c0e4044b9b680230f51c4f |
||||
timeCreated: 1439546126 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -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<Text>(); |
||||
inputField = GetComponent<InputField>(); |
||||
textMesh = GetComponent<TextMesh>(); |
||||
} |
||||
|
||||
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 += "<color=" + colorText + ">"; |
||||
} |
||||
if (boldActive) |
||||
{ |
||||
tagText += "<b>"; |
||||
} |
||||
if (italicActive) |
||||
{ |
||||
tagText += "<i>"; |
||||
} |
||||
} |
||||
|
||||
return tagText; |
||||
} |
||||
|
||||
protected virtual string CloseMarkup() |
||||
{ |
||||
string closeText = ""; |
||||
|
||||
if (SupportsRichText()) |
||||
{ |
||||
if (italicActive) |
||||
{ |
||||
closeText += "</i>"; |
||||
} |
||||
if (boldActive) |
||||
{ |
||||
closeText += "</b>"; |
||||
} |
||||
if (colorActive) |
||||
{ |
||||
closeText += "</color>"; |
||||
} |
||||
} |
||||
|
||||
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<TextTagParser.Token> tokens = tagParser.Tokenize(content); |
||||
|
||||
StartCoroutine(ProcessTokens(tokens, onComplete)); |
||||
} |
||||
|
||||
protected virtual IEnumerator ProcessTokens(List<TextTagParser.Token> 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 += "<color=" + hiddenColor + ">" + right + "</color>"; |
||||
} |
||||
|
||||
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<AudioSource>(); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2 |
||||
guid: a676940fce6344af1a70043b089a6c14 |
||||
timeCreated: 1437427397 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: f204ed91830f24eb086dca53a4ecac22 |
||||
folderAsset: yes |
||||
timeCreated: 1439480503 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: ed7d38898531446fca43d7ff3d9a5c35 |
||||
folderAsset: yes |
||||
timeCreated: 1437657363 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
Binary file not shown.
@ -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: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 27691b3c5e5044c968559d92599fae5e |
||||
folderAsset: yes |
||||
timeCreated: 1437398356 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -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<TextTagParser.Token> 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<TextTagParser.Token> 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); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2 |
||||
guid: a9cea7ad00f8a4d8aa33b09722792171 |
||||
timeCreated: 1436968375 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -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>(); |
||||
writer.SetInputFlag(); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 21440b2111dd24f8e95aa8fc983c53dd |
||||
timeCreated: 1437489220 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: f7526ee6ce9194a858b35171b9173bdc |
||||
folderAsset: yes |
||||
timeCreated: 1438162230 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
Binary file not shown.
@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 81391c336c8a84b67991d7cc40d8d192 |
||||
timeCreated: 1438335040 |
||||
licenseType: Free |
||||
TextureImporter: |
||||
fileIDToRecycleName: {} |
||||
serializedVersion: 2 |
||||
mipmaps: |
||||
mipMapMode: 0 |
||||
enableMipMap: 1 |
||||
linearTexture: 0 |
||||
correctGamma: 0 |
||||
fadeOut: 0 |
||||
borderMipMap: 0 |
||||
mipMapFadeDistanceStart: 1 |
||||
mipMapFadeDistanceEnd: 3 |
||||
bumpmap: |
||||
convertToNormalMap: 0 |
||||
externalNormalMap: 0 |
||||
heightScale: .25 |
||||
normalMapFilter: 0 |
||||
isReadable: 0 |
||||
grayScaleToAlpha: 0 |
||||
generateCubemap: 0 |
||||
cubemapConvolution: 0 |
||||
cubemapConvolutionSteps: 8 |
||||
cubemapConvolutionExponent: 1.5 |
||||
seamlessCubemap: 0 |
||||
textureFormat: -1 |
||||
maxTextureSize: 2048 |
||||
textureSettings: |
||||
filterMode: -1 |
||||
aniso: -1 |
||||
mipBias: -1 |
||||
wrapMode: 1 |
||||
nPOTScale: 0 |
||||
lightmap: 0 |
||||
rGBM: 0 |
||||
compressionQuality: 50 |
||||
spriteMode: 1 |
||||
spriteExtrude: 1 |
||||
spriteMeshType: 1 |
||||
alignment: 0 |
||||
spritePivot: {x: .5, y: .5} |
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0} |
||||
spritePixelsToUnits: 100 |
||||
alphaIsTransparency: 1 |
||||
textureType: 8 |
||||
buildTargetSettings: [] |
||||
spriteSheet: |
||||
sprites: [] |
||||
spritePackingTag: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
using UnityEngine; |
||||
using System.Collections; |
||||
|
||||
public class TestFlags : MonoBehaviour |
||||
{ |
||||
public bool messageReceived { get; set; } |
||||
|
||||
public bool writeCommandsFinished { get; set; } |
||||
} |
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2 |
||||
guid: a3043c63f002347b9b36c07403fffaa7 |
||||
timeCreated: 1437997441 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue