diff --git a/Assets/Fungus/Scripts/Components/Block.cs b/Assets/Fungus/Scripts/Components/Block.cs
index 41278dfd..9be9693f 100644
--- a/Assets/Fungus/Scripts/Components/Block.cs
+++ b/Assets/Fungus/Scripts/Components/Block.cs
@@ -213,6 +213,7 @@ namespace Fungus
var flowchart = GetFlowchart();
executionState = ExecutionState.Executing;
+ BlockSignals.DoBlockStart(this);
#if UNITY_EDITOR
// Select the executing block & the first command
@@ -278,6 +279,7 @@ namespace Fungus
// This icon timer is managed by the FlowchartWindow class, but we also need to
// set it here in case a command starts and finishes execution before the next window update.
command.ExecutingIconTimer = Time.realtimeSinceStartup + FungusConstants.ExecutingIconFadeTime;
+ BlockSignals.DoCommandExecute(this, command, i, commandList.Count);
command.Execute();
// Wait until the executing command sets another command to jump to via Command.Continue()
@@ -298,6 +300,7 @@ namespace Fungus
executionState = ExecutionState.Idle;
activeCommand = null;
+ BlockSignals.DoBlockEnd(this);
if (onComplete != null)
{
diff --git a/Assets/Fungus/Scripts/Components/Writer.cs b/Assets/Fungus/Scripts/Components/Writer.cs
index a23d8b13..667c3281 100644
--- a/Assets/Fungus/Scripts/Components/Writer.cs
+++ b/Assets/Fungus/Scripts/Components/Writer.cs
@@ -12,6 +12,23 @@ using Fungus.Utils;
namespace Fungus
{
+ ///
+ /// Current state of the writing process.
+ ///
+ public enum WriterState
+ {
+ /// Invalid state.
+ Invalid,
+ /// Writer has started writing.
+ Start,
+ /// Writing has been paused.
+ Pause,
+ /// Writing has resumed after a pause.
+ Resume,
+ /// Writing has ended.
+ End
+ }
+
///
/// Writes text using a typewriter effect to a UI text object.
///
@@ -232,8 +249,12 @@ namespace Fungus
TokenType previousTokenType = TokenType.Invalid;
- foreach (TextTagToken token in tokens)
+ for (int i = 0; i < tokens.Count; ++i)
{
+ var token = tokens[i];
+
+ // Notify listeners about new token
+ WriterSignals.DoTextTagToken(this, token, i, tokens.Count);
switch (token.type)
{
@@ -665,6 +686,8 @@ namespace Fungus
protected virtual void NotifyInput()
{
+ WriterSignals.DoWriterInput(this);
+
foreach (IWriterListener writerListener in writerListeners)
{
writerListener.OnInput();
@@ -673,6 +696,8 @@ namespace Fungus
protected virtual void NotifyStart(AudioClip audioClip)
{
+ WriterSignals.DoWriterState(this, WriterState.Start);
+
foreach (IWriterListener writerListener in writerListeners)
{
writerListener.OnStart(audioClip);
@@ -681,6 +706,8 @@ namespace Fungus
protected virtual void NotifyPause()
{
+ WriterSignals.DoWriterState(this, WriterState.Pause);
+
foreach (IWriterListener writerListener in writerListeners)
{
writerListener.OnPause();
@@ -689,6 +716,8 @@ namespace Fungus
protected virtual void NotifyResume()
{
+ WriterSignals.DoWriterState(this, WriterState.Resume);
+
foreach (IWriterListener writerListener in writerListeners)
{
writerListener.OnResume();
@@ -697,6 +726,8 @@ namespace Fungus
protected virtual void NotifyEnd(bool stopAudio)
{
+ WriterSignals.DoWriterState(this, WriterState.End);
+
foreach (IWriterListener writerListener in writerListeners)
{
writerListener.OnEnd(stopAudio);
@@ -705,6 +736,8 @@ namespace Fungus
protected virtual void NotifyGlyph()
{
+ WriterSignals.DoWriterGlyph(this);
+
foreach (IWriterListener writerListener in writerListeners)
{
writerListener.OnGlyph();
diff --git a/Assets/Fungus/Scripts/Signals.meta b/Assets/Fungus/Scripts/Signals.meta
new file mode 100644
index 00000000..a6a5b714
--- /dev/null
+++ b/Assets/Fungus/Scripts/Signals.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c5af9b1dcfc3a4963add98929d9386c0
+folderAsset: yes
+timeCreated: 1474968754
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Fungus/Scripts/Signals/BlockSignals.cs b/Assets/Fungus/Scripts/Signals/BlockSignals.cs
new file mode 100644
index 00000000..0492d850
--- /dev/null
+++ b/Assets/Fungus/Scripts/Signals/BlockSignals.cs
@@ -0,0 +1,36 @@
+using Fungus.Utils;
+
+namespace Fungus
+{
+ ///
+ /// Block event signalling system.
+ /// You can use this to be notified about various events in the Block execution process.
+ ///
+ public static class BlockSignals
+ {
+ #region Public members
+
+ ///
+ /// BlockStart signal. Sent when the Block starts execution.
+ ///
+ public static event BlockStartHandler OnBlockStart;
+ public delegate void BlockStartHandler(Block block);
+ public static void DoBlockStart(Block block) { if (OnBlockStart != null) OnBlockStart(block); }
+
+ ///
+ /// BlockEnd signal. Sent when the Block ends execution.
+ ///
+ public static event BlockEndHandler OnBlockEnd;
+ public delegate void BlockEndHandler(Block block);
+ public static void DoBlockEnd(Block block) { if (OnBlockEnd != null) OnBlockEnd(block); }
+
+ ///
+ /// CommandExecute signal. Sent just before a Command in a Block executes.
+ ///
+ public static event CommandExecuteHandler OnCommandExecute;
+ public delegate void CommandExecuteHandler(Block block, Command command, int commandIndex, int maxCommandIndex);
+ public static void DoCommandExecute(Block block, Command command, int commandIndex, int maxCommandIndex) { if (OnCommandExecute != null) OnCommandExecute(block, command, commandIndex, maxCommandIndex); }
+
+ #endregion
+ }
+}
diff --git a/Assets/Fungus/Scripts/Signals/BlockSignals.cs.meta b/Assets/Fungus/Scripts/Signals/BlockSignals.cs.meta
new file mode 100644
index 00000000..d3c70701
--- /dev/null
+++ b/Assets/Fungus/Scripts/Signals/BlockSignals.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 12109e10b0f034bbab8a7a5d700bc070
+timeCreated: 1474988491
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Fungus/Scripts/Signals/WriterSignals.cs b/Assets/Fungus/Scripts/Signals/WriterSignals.cs
new file mode 100644
index 00000000..ff9680d5
--- /dev/null
+++ b/Assets/Fungus/Scripts/Signals/WriterSignals.cs
@@ -0,0 +1,45 @@
+using UnityEngine;
+using System.Collections;
+using Fungus.Utils;
+
+namespace Fungus
+{
+ ///
+ /// Writer event signalling system.
+ /// You can use this to be notified about various events in the writing process.
+ ///
+ public static class WriterSignals
+ {
+ #region Public members
+
+ ///
+ /// TextTagToken signal. Sent for each unique token when writing text.
+ ///
+ public static event TextTagTokenHandler OnTextTagToken;
+ public delegate void TextTagTokenHandler(Writer writer, TextTagToken token, int index, int maxIndex);
+ public static void DoTextTagToken(Writer writer, TextTagToken token, int index, int maxIndex) { if(OnTextTagToken != null) OnTextTagToken(writer, token, index, maxIndex); }
+
+ ///
+ /// WriterState signal. Sent when the writer changes state.
+ ///
+ public static event WriterStateHandler OnWriterState;
+ public delegate void WriterStateHandler(Writer writer, WriterState writerState);
+ public static void DoWriterState(Writer writer, WriterState writerState) { if (OnWriterState != null) OnWriterState(writer, writerState); }
+
+ ///
+ /// WriterInput signal. Sent when the writer receives player input.
+ ///
+ public static event WriterInputHandler OnWriterInput;
+ public delegate void WriterInputHandler(Writer writer);
+ public static void DoWriterInput(Writer writer) { if (OnWriterInput != null) OnWriterInput(writer); }
+
+ ///
+ /// WriterGlyph signal. Sent when the writer writes out a glyph.
+ ///
+ public delegate void WriterGlyphHandler(Writer writer);
+ public static event WriterGlyphHandler OnWriterGlyph;
+ public static void DoWriterGlyph(Writer writer) { if (OnWriterGlyph != null) OnWriterGlyph(writer); }
+
+ #endregion
+ }
+}
diff --git a/Assets/Fungus/Scripts/Signals/WriterSignals.cs.meta b/Assets/Fungus/Scripts/Signals/WriterSignals.cs.meta
new file mode 100644
index 00000000..a4058cc1
--- /dev/null
+++ b/Assets/Fungus/Scripts/Signals/WriterSignals.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d8d3d56bc3bd9488d8e6e30b9bf99fc4
+timeCreated: 1474970135
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tests/Commands/FailTest.cs b/Assets/Tests/Commands/FailTest.cs
index e6408041..ccf546e7 100644
--- a/Assets/Tests/Commands/FailTest.cs
+++ b/Assets/Tests/Commands/FailTest.cs
@@ -6,10 +6,10 @@ using System.Collections;
namespace Fungus
{
-
[CommandInfo("Tests",
"Fail",
"Fails the current integration test")]
+ [AddComponentMenu("")]
public class FailTest : Command
{
public string failMessage;
@@ -21,5 +21,4 @@ namespace Fungus
Continue();
}
}
-
}
\ No newline at end of file
diff --git a/Assets/Tests/Commands/PassTest.cs b/Assets/Tests/Commands/PassTest.cs
index 394ceb3c..b84e6cc3 100644
--- a/Assets/Tests/Commands/PassTest.cs
+++ b/Assets/Tests/Commands/PassTest.cs
@@ -6,10 +6,10 @@ using System.Collections;
namespace Fungus
{
-
[CommandInfo("Tests",
"Pass",
"Passes the current integration test")]
+ [AddComponentMenu("")]
public class PassTest : Command
{
public override void OnEnter()
@@ -19,5 +19,4 @@ namespace Fungus
Continue();
}
}
-
}
\ No newline at end of file
diff --git a/Assets/Tests/Signals.meta b/Assets/Tests/Signals.meta
new file mode 100644
index 00000000..14a1dee1
--- /dev/null
+++ b/Assets/Tests/Signals.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2e1206d3bce424ca8a9b82f05c69335d
+folderAsset: yes
+timeCreated: 1474982411
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tests/Signals/BlockSignalsTester.cs b/Assets/Tests/Signals/BlockSignalsTester.cs
new file mode 100644
index 00000000..754d9a26
--- /dev/null
+++ b/Assets/Tests/Signals/BlockSignalsTester.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+using System.Collections;
+using Fungus.Commands;
+
+namespace Fungus
+{
+ ///
+ /// Checks if Block signals are being sent correctly.
+ ///
+ [AddComponentMenu("")]
+ public class BlockSignalsTester : MonoBehaviour
+ {
+ bool started = false;
+ bool commandExecuted = false;
+
+ void OnEnable()
+ {
+ BlockSignals.OnBlockStart += OnBlockStart;
+ BlockSignals.OnBlockEnd += OnBlockEnd;
+ BlockSignals.OnCommandExecute += OnCommandExecute;
+ }
+
+ void OnDisable()
+ {
+ BlockSignals.OnBlockStart -= OnBlockStart;
+ BlockSignals.OnBlockEnd -= OnBlockEnd;
+ BlockSignals.OnCommandExecute -= OnCommandExecute;
+ }
+
+ void OnBlockStart(Block block)
+ {
+ IntegrationTest.Assert(block.BlockName == "Start");
+
+ started = true;
+ }
+
+ void OnBlockEnd(Block block)
+ {
+ IntegrationTest.Assert(started);
+ IntegrationTest.Assert(commandExecuted);
+
+ IntegrationTest.Pass();
+ }
+
+ void OnCommandExecute(Block block, Command command, int commandIndex, int maxCommandIndex)
+ {
+ IntegrationTest.Assert(commandIndex == 0);
+ IntegrationTest.Assert(maxCommandIndex == 1);
+ IntegrationTest.Assert(command.GetType() == typeof(Wait));
+ commandExecuted = true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Tests/Signals/BlockSignalsTester.cs.meta b/Assets/Tests/Signals/BlockSignalsTester.cs.meta
new file mode 100644
index 00000000..6fe2ffc5
--- /dev/null
+++ b/Assets/Tests/Signals/BlockSignalsTester.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5d396ca39a0454e2ca06d4aad7c5706c
+timeCreated: 1474988463
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tests/Signals/SignalsTests.unity b/Assets/Tests/Signals/SignalsTests.unity
new file mode 100644
index 00000000..c368d289
--- /dev/null
+++ b/Assets/Tests/Signals/SignalsTests.unity
@@ -0,0 +1,1034 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+ m_ObjectHideFlags: 0
+ m_PVSData:
+ m_PVSObjectsArray: []
+ m_PVSPortalsArray: []
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 7
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 3
+ m_SkyboxMaterial: {fileID: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 7
+ m_GIWorkflowMode: 1
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_TemporalCoherenceThreshold: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 0
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 4
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_TextureWidth: 1024
+ m_TextureHeight: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_DirectLightInLightProbes: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_LightingDataAsset: {fileID: 0}
+ m_RuntimeCPUUsage: 25
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ accuratePlacement: 0
+ minRegionArea: 2
+ cellSize: 0.16666667
+ manualCellSize: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &41796120
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 224: {fileID: 41796123}
+ - 222: {fileID: 41796122}
+ - 114: {fileID: 41796121}
+ - 114: {fileID: 41796124}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &41796121
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 41796120}
+ 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: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 32
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 0
+ m_MaxSize: 40
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: New Text
+--- !u!222 &41796122
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 41796120}
+--- !u!224 &41796123
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 41796120}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 1210976074}
+ m_RootOrder: 0
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 96}
+ m_Pivot: {x: 0, y: 1}
+--- !u!114 &41796124
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 41796120}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a676940fce6344af1a70043b089a6c14, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ targetTextObject: {fileID: 41796120}
+ punchObject: {fileID: 41796120}
+ writingSpeed: 60
+ punctuationPause: 0.25
+ hiddenTextColor: {r: 1, g: 1, b: 1, a: 0}
+ writeWholeWords: 0
+ forceRichText: 1
+ instantComplete: 1
+--- !u!1 &147434164
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 147434166}
+ - 114: {fileID: 147434165}
+ m_Layer: 0
+ m_Name: WriterSignalsTest
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!114 &147434165
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 147434164}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b1dba0b27b0864740a8720e920aa88c0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ timeout: 5
+ ignored: 0
+ succeedAfterAllAssertionsAreExecuted: 0
+ expectException: 0
+ expectedExceptionList:
+ succeedWhenExceptionIsThrown: 0
+ includedPlatforms: -1
+ platformsToIgnore: []
+ dynamic: 0
+ dynamicTypeName:
+--- !u!4 &147434166
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 147434164}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 1201908856}
+ - {fileID: 1210976074}
+ - {fileID: 411939900}
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+--- !u!1 &286067095
+GameObject:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 286067097}
+ - 114: {fileID: 286067096}
+ m_Layer: 0
+ m_Name: _FungusState
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &286067096
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 286067095}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 61dddfdc5e0e44ca298d8f46f7f5a915, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ selectedFlowchart: {fileID: 330763419}
+--- !u!4 &286067097
+Transform:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 286067095}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+--- !u!1 &330763414
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 142980, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 330763415}
+ - 114: {fileID: 330763419}
+ - 114: {fileID: 330763418}
+ - 114: {fileID: 330763417}
+ - 114: {fileID: 330763416}
+ m_Layer: 0
+ m_Name: Flowchart
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &330763415
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 467082, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 330763414}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 467145139}
+ m_RootOrder: 0
+--- !u!114 &330763416
+MonoBehaviour:
+ m_ObjectHideFlags: 2
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 330763414}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3315ad2ebb85443909a1203d56d9344e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ itemId: 1
+ indentLevel: 0
+ _duration:
+ floatRef: {fileID: 0}
+ floatVal: 1
+ durationOLD: 0
+--- !u!114 &330763417
+MonoBehaviour:
+ m_ObjectHideFlags: 2
+ m_PrefabParentObject: {fileID: 11462346, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 330763414}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d2f6487d21a03404cb21b245f0242e79, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ parentBlock: {fileID: 330763418}
+--- !u!114 &330763418
+MonoBehaviour:
+ m_ObjectHideFlags: 2
+ m_PrefabParentObject: {fileID: 11433304, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 330763414}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3d3d73aef2cfc4f51abf34ac00241f60, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ nodeRect:
+ serializedVersion: 2
+ x: 67
+ y: 70
+ width: 120
+ height: 40
+ itemId: 0
+ blockName: Start
+ description:
+ eventHandler: {fileID: 330763417}
+ commandList:
+ - {fileID: 330763416}
+--- !u!114 &330763419
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 11430050, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 330763414}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7a334fe2ffb574b3583ff3b18b4792d3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ version: 1
+ scrollPos: {x: 0, y: 0}
+ variablesScrollPos: {x: 0, y: 0}
+ variablesExpanded: 1
+ blockViewHeight: 400
+ zoom: 1
+ scrollViewRect:
+ serializedVersion: 2
+ x: -343
+ y: -340
+ width: 1114
+ height: 859
+ selectedBlock: {fileID: 330763418}
+ selectedCommands: []
+ variables: []
+ description:
+ stepPause: 0
+ colorCommands: 1
+ hideComponents: 1
+ saveSelection: 1
+ localizationId:
+ showLineNumbers: 0
+ hideCommands: []
+ luaEnvironment: {fileID: 0}
+ luaBindingName: flowchart
+--- !u!1 &411939899
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 142980, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 411939900}
+ - 114: {fileID: 411939904}
+ - 114: {fileID: 411939903}
+ - 114: {fileID: 411939902}
+ - 114: {fileID: 411939901}
+ - 114: {fileID: 411939908}
+ - 114: {fileID: 411939907}
+ - 114: {fileID: 411939906}
+ - 114: {fileID: 411939905}
+ m_Layer: 0
+ m_Name: Flowchart
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &411939900
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 467082, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 147434166}
+ m_RootOrder: 2
+--- !u!114 &411939901
+MonoBehaviour:
+ m_ObjectHideFlags: 2
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ad2261dbe44de43a980e6f7c77c88f7f, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ itemId: 1
+ indentLevel: 0
+ textObject: {fileID: 41796120}
+ text:
+ stringRef: {fileID: 0}
+ stringVal: '{b}{w=1}hello{/b}'
+ description:
+ clearText: 1
+ waitUntilFinished: 1
+ textColor: 0
+ setAlpha:
+ floatRef: {fileID: 0}
+ floatVal: 1
+ setColor:
+ colorRef: {fileID: 0}
+ colorVal: {r: 1, g: 1, b: 1, a: 1}
+--- !u!114 &411939902
+MonoBehaviour:
+ m_ObjectHideFlags: 2
+ m_PrefabParentObject: {fileID: 11462346, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d2f6487d21a03404cb21b245f0242e79, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ parentBlock: {fileID: 411939903}
+--- !u!114 &411939903
+MonoBehaviour:
+ m_ObjectHideFlags: 2
+ m_PrefabParentObject: {fileID: 11433304, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3d3d73aef2cfc4f51abf34ac00241f60, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ nodeRect:
+ serializedVersion: 2
+ x: 68
+ y: 70
+ width: 120
+ height: 40
+ itemId: 0
+ blockName: Start
+ description: Starts writing text using a Writer
+ eventHandler: {fileID: 411939902}
+ commandList:
+ - {fileID: 411939901}
+--- !u!114 &411939904
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 11430050, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7a334fe2ffb574b3583ff3b18b4792d3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ version: 1
+ scrollPos: {x: 0, y: 0}
+ variablesScrollPos: {x: 0, y: 0}
+ variablesExpanded: 1
+ blockViewHeight: 400
+ zoom: 1
+ scrollViewRect:
+ serializedVersion: 2
+ x: -350
+ y: -350
+ width: 1121
+ height: 869
+ selectedBlock: {fileID: 411939903}
+ selectedCommands: []
+ variables: []
+ description: Check that Writer signals are sending correctly
+ stepPause: 0
+ colorCommands: 1
+ hideComponents: 1
+ saveSelection: 1
+ localizationId:
+ showLineNumbers: 0
+ hideCommands: []
+ luaEnvironment: {fileID: 0}
+ luaBindingName: flowchart
+--- !u!114 &411939905
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 688e35811870d403f9e2b1ab2a699d98, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ itemId: 4
+ indentLevel: 0
+ targetObject: {fileID: 41796120}
+ targetComponentAssemblyName: Fungus.Writer, Assembly-CSharp, Version=0.0.0.0, Culture=neutral,
+ PublicKeyToken=null
+ targetComponentFullname: UnityEngine.Component[]
+ targetComponentText: Writer
+ targetMethod: OnNextLineEvent
+ targetMethodText: 'OnNextLineEvent (): Void'
+ methodParameters: []
+ saveReturnValue: 0
+ returnValueVariableKey:
+ returnValueType: System.Void
+ showInherited: 0
+ callMode: 0
+--- !u!114 &411939906
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3315ad2ebb85443909a1203d56d9344e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ itemId: 3
+ indentLevel: 0
+ _duration:
+ floatRef: {fileID: 0}
+ floatVal: 0.5
+ durationOLD: 0
+--- !u!114 &411939907
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d2f6487d21a03404cb21b245f0242e79, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ parentBlock: {fileID: 411939908}
+--- !u!114 &411939908
+MonoBehaviour:
+ m_ObjectHideFlags: 2
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 411939899}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3d3d73aef2cfc4f51abf34ac00241f60, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ nodeRect:
+ serializedVersion: 2
+ x: 249
+ y: 69
+ width: 120
+ height: 40
+ itemId: 2
+ blockName: DoInput
+ description: Sends an input event to the Writer after a short delay
+ eventHandler: {fileID: 411939907}
+ commandList:
+ - {fileID: 411939906}
+ - {fileID: 411939905}
+--- !u!1 &467145137
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 467145139}
+ - 114: {fileID: 467145138}
+ m_Layer: 0
+ m_Name: BlockSignalsTest
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &467145138
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 467145137}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b1dba0b27b0864740a8720e920aa88c0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ timeout: 5
+ ignored: 0
+ succeedAfterAllAssertionsAreExecuted: 0
+ expectException: 0
+ expectedExceptionList:
+ succeedWhenExceptionIsThrown: 0
+ includedPlatforms: -1
+ platformsToIgnore: []
+ dynamic: 0
+ dynamicTypeName:
+--- !u!4 &467145139
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 467145137}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 330763415}
+ - {fileID: 676488089}
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+--- !u!1 &597475644
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 597475649}
+ - 20: {fileID: 597475648}
+ - 92: {fileID: 597475647}
+ - 124: {fileID: 597475646}
+ - 81: {fileID: 597475645}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &597475645
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 597475644}
+ m_Enabled: 1
+--- !u!124 &597475646
+Behaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 597475644}
+ m_Enabled: 1
+--- !u!92 &597475647
+Behaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 597475644}
+ m_Enabled: 1
+--- !u!20 &597475648
+Camera:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 597475644}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 1
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+ m_StereoMirrorMode: 0
+--- !u!4 &597475649
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 597475644}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+--- !u!1 &676488088
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 676488089}
+ - 114: {fileID: 676488090}
+ m_Layer: 0
+ m_Name: BlockSignalsTester
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &676488089
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 676488088}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 467145139}
+ m_RootOrder: 1
+--- !u!114 &676488090
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 676488088}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5d396ca39a0454e2ca06d4aad7c5706c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!1 &759754969
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 759754972}
+ - 114: {fileID: 759754971}
+ - 114: {fileID: 759754970}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &759754970
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 759754969}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalAxis: Horizontal
+ m_VerticalAxis: Vertical
+ m_SubmitButton: Submit
+ m_CancelButton: Cancel
+ m_InputActionsPerSecond: 10
+ m_RepeatDelay: 0.5
+ m_ForceModuleActive: 0
+--- !u!114 &759754971
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 759754969}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 5
+--- !u!4 &759754972
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 759754969}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+--- !u!1 &1201908855
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 1201908856}
+ - 114: {fileID: 1201908857}
+ m_Layer: 0
+ m_Name: WriterSignalsTester
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1201908856
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1201908855}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 147434166}
+ m_RootOrder: 0
+--- !u!114 &1201908857
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1201908855}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cb302fcb509f14caf93dea80411e90ac, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!1 &1210976073
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 224: {fileID: 1210976074}
+ - 223: {fileID: 1210976077}
+ - 114: {fileID: 1210976076}
+ - 114: {fileID: 1210976075}
+ m_Layer: 5
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1210976074
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1210976073}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 41796123}
+ m_Father: {fileID: 147434166}
+ m_RootOrder: 1
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!114 &1210976075
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1210976073}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1210976076
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1210976073}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 0
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 800, y: 600}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+--- !u!223 &1210976077
+Canvas:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1210976073}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!1 &1906475156
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 1906475158}
+ - 114: {fileID: 1906475157}
+ m_Layer: 0
+ m_Name: TestRunner
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1906475157
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1906475156}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5c3afc1c624179749bcdecf7b0224902, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ currentTest: {fileID: 0}
+--- !u!4 &1906475158
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1906475156}
+ 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
diff --git a/Assets/Tests/Signals/SignalsTests.unity.meta b/Assets/Tests/Signals/SignalsTests.unity.meta
new file mode 100644
index 00000000..37bec2a6
--- /dev/null
+++ b/Assets/Tests/Signals/SignalsTests.unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8acd008952a224b138b2b02baae1f7ff
+timeCreated: 1474970336
+licenseType: Free
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tests/Signals/WriterSignalsTester.cs b/Assets/Tests/Signals/WriterSignalsTester.cs
new file mode 100644
index 00000000..323b47a3
--- /dev/null
+++ b/Assets/Tests/Signals/WriterSignalsTester.cs
@@ -0,0 +1,97 @@
+using UnityEngine;
+using Fungus.Utils;
+
+namespace Fungus
+{
+ ///
+ /// Checks if Writer signals are being sent correctly.
+ ///
+ [AddComponentMenu("")]
+ public class WriterSignalsTester : MonoBehaviour
+ {
+ int correctTagCount = 0;
+ bool receivedInput = false;
+ int glyphCount = 0;
+
+ void OnEnable()
+ {
+ WriterSignals.OnTextTagToken += OnTextTagToken;
+ WriterSignals.OnWriterState += OnWriterState;
+ WriterSignals.OnWriterInput += OnWriterInput;
+ WriterSignals.OnWriterGlyph += OnWriterGlyph;
+ }
+
+ void OnDisable()
+ {
+ WriterSignals.OnTextTagToken -= OnTextTagToken;
+ WriterSignals.OnWriterState -= OnWriterState;
+ WriterSignals.OnWriterInput -= OnWriterInput;
+ WriterSignals.OnWriterGlyph -= OnWriterGlyph;
+ }
+
+ void OnTextTagToken(Writer writer, TextTagToken token, int index, int maxIndex)
+ {
+ if (index == 0 && token.type == TokenType.BoldStart)
+ {
+ correctTagCount++;
+ }
+ else if (index == 1 && token.type == TokenType.Wait)
+ {
+ correctTagCount++;
+ }
+ else if (index == 2 && token.type == TokenType.Words)
+ {
+ correctTagCount++;
+ }
+ else if (index == 3 && token.type == TokenType.BoldEnd)
+ {
+ correctTagCount++;
+ }
+ }
+
+ void OnWriterState(Writer writer, WriterState writerState)
+ {
+ if (writerState == WriterState.Start && correctTagCount != 0)
+ {
+ IntegrationTest.Fail();
+ }
+ if (writerState == WriterState.Pause && correctTagCount != 2)
+ {
+ IntegrationTest.Fail();
+ }
+ if (writerState == WriterState.Resume && correctTagCount != 2)
+ {
+ IntegrationTest.Fail();
+ }
+ else if (writerState == WriterState.End && correctTagCount != 4)
+ {
+ IntegrationTest.Fail();
+ }
+
+ if (writerState == WriterState.End)
+ {
+ if (!receivedInput)
+ {
+ IntegrationTest.Fail();
+ }
+
+ if (glyphCount != 6)
+ {
+ IntegrationTest.Fail();
+ }
+
+ IntegrationTest.Pass();
+ }
+ }
+
+ void OnWriterInput(Writer writer)
+ {
+ receivedInput = true;
+ }
+
+ void OnWriterGlyph(Writer writer)
+ {
+ glyphCount++;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Tests/Signals/WriterSignalsTester.cs.meta b/Assets/Tests/Signals/WriterSignalsTester.cs.meta
new file mode 100644
index 00000000..85e40810
--- /dev/null
+++ b/Assets/Tests/Signals/WriterSignalsTester.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: cb302fcb509f14caf93dea80411e90ac
+timeCreated: 1474968744
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: