diff --git a/Assets/Fungus/Scripts/Commands/Conversation.cs b/Assets/Fungus/Scripts/Commands/Conversation.cs index c7dfb143..42e1da4a 100644 --- a/Assets/Fungus/Scripts/Commands/Conversation.cs +++ b/Assets/Fungus/Scripts/Commands/Conversation.cs @@ -7,11 +7,11 @@ using System.Collections; namespace Fungus { /// - /// Do multiple say and portrait commands in a single block of text. Format is: [character] [portrait] [stage position] [: Story text]. + /// Do multiple say and portrait commands in a single block of text. Format is: [character] [portrait] [stage position] [hide] [<<< | >>>] [clear | noclear] [wait | nowait] [fade | nofade] [: Story text]. /// [CommandInfo("Narrative", - "Conversation", - "Do multiple say and portrait commands in a single block of text. Format is: [character] [portrait] [stage position] [: Story text]")] + "Conversation", + "Do multiple say and portrait commands in a single block of text. Format is: [character] [portrait] [stage position] [hide] [<<< | >>>] [clear | noclear] [wait | nowait] [fade | nofade] [: Story text]")] [AddComponentMenu("")] [ExecuteInEditMode] public class Conversation : Command @@ -20,6 +20,12 @@ namespace Fungus protected ConversationManager conversationManager = new ConversationManager(); + [SerializeField] protected BooleanData clearPrevious = new BooleanData(true); + [SerializeField] protected BooleanData waitForInput = new BooleanData(true); + [Tooltip("a wait for seconds added to each item of the conversation.")] + [SerializeField] protected FloatData waitForSeconds = new FloatData(0); + [SerializeField] protected BooleanData fadeWhenDone = new BooleanData(true); + protected virtual void Start() { conversationManager.PopulateCharacterCache(); @@ -30,6 +36,11 @@ namespace Fungus var flowchart = GetFlowchart(); string subbedText = flowchart.SubstituteVariables(conversationText.Value); + conversationManager.ClearPrev = clearPrevious; + conversationManager.WaitForInput = waitForInput; + conversationManager.FadeDone = fadeWhenDone; + conversationManager.WaitForSeconds = waitForSeconds; + yield return StartCoroutine(conversationManager.DoConversation(subbedText)); Continue(); diff --git a/Assets/Fungus/Scripts/Utils/ConversationManager.cs b/Assets/Fungus/Scripts/Utils/ConversationManager.cs index 940eae8e..7dcf8efd 100644 --- a/Assets/Fungus/Scripts/Utils/ConversationManager.cs +++ b/Assets/Fungus/Scripts/Utils/ConversationManager.cs @@ -23,11 +23,25 @@ namespace Fungus public bool Hide { get; set; } public FacingDirection FacingDirection { get; set; } public bool Flip { get; set; } + public bool ClearPrev { get; set; } + public bool WaitForInput { get; set; } + public bool FadeDone { get; set; } } protected Character[] characters; protected bool exitSayWait; + public bool ClearPrev { get; set; } + public bool WaitForInput { get; set; } + public bool FadeDone { get; set; } + public FloatData WaitForSeconds { get; internal set; } + + public ConversationManager() + { + ClearPrev = true; + FadeDone = true; + WaitForInput = true; + } /// /// Splits the string passed in by the delimiters passed in. @@ -150,16 +164,53 @@ namespace Fungus protected virtual ConversationItem CreateConversationItem(string[] sayParams, string text, Character currentCharacter) { var item = new ConversationItem(); + item.ClearPrev = ClearPrev; + item.FadeDone = FadeDone; + item.WaitForInput = WaitForInput; // Populate the story text to be written item.Text = text; + if(WaitForSeconds > 0) + { + item.Text += "{w=" + WaitForSeconds.ToString() +"}"; + } + if (sayParams == null || sayParams.Length == 0) { // Text only, no params - early out. return item; } + //TODO this needs a refactor + for (int i = 0; i < sayParams.Length; i++) + { + if (string.Compare(sayParams[i], "clear", true) == 0) + { + item.ClearPrev = true; + } + else if (string.Compare(sayParams[i], "noclear", true) == 0) + { + item.ClearPrev = false; + } + else if (string.Compare(sayParams[i], "fade", true) == 0) + { + item.FadeDone = true; + } + else if (string.Compare(sayParams[i], "nofade", true) == 0) + { + item.FadeDone = false; + } + else if (string.Compare(sayParams[i], "wait", true) == 0) + { + item.WaitForInput = true; + } + else if (string.Compare(sayParams[i], "nowait", true) == 0) + { + item.WaitForInput = false; + } + } + // try to find the character param first, since we need to get its portrait int characterIndex = -1; if (characters == null) @@ -381,7 +432,7 @@ namespace Fungus if (!string.IsNullOrEmpty(item.Text)) { exitSayWait = false; - sayDialog.Say(item.Text, true, true, true, true, false, null, () => { + sayDialog.Say(item.Text, item.ClearPrev, item.WaitForInput, item.FadeDone, true, false, null, () => { exitSayWait = true; }); diff --git a/Assets/Fungus/Scripts/Utils/TextTagParser.cs b/Assets/Fungus/Scripts/Utils/TextTagParser.cs index 6fb14a72..36b36451 100644 --- a/Assets/Fungus/Scripts/Utils/TextTagParser.cs +++ b/Assets/Fungus/Scripts/Utils/TextTagParser.cs @@ -209,6 +209,7 @@ namespace Fungus "\t{w}, {w=0.5} Wait (seconds)\n" + "\t{wi} Wait for input\n" + "\t{wc} Wait for input and clear\n" + + "\t{wvo} Wait for voice over line to complete\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" + diff --git a/Assets/FungusExamples/Conversation/Conversation.unity b/Assets/FungusExamples/Conversation/Conversation.unity index 0ed4bd52..aa9c8a0c 100644 --- a/Assets/FungusExamples/Conversation/Conversation.unity +++ b/Assets/FungusExamples/Conversation/Conversation.unity @@ -1,19 +1,19 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!29 &1 -SceneSettings: +OcclusionCullingSettings: m_ObjectHideFlags: 0 - m_PVSData: - m_PVSObjectsArray: [] - m_PVSPortalsArray: [] + serializedVersion: 2 m_OcclusionBakeSettings: smallestOccluder: 5 smallestHole: 0.25 backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 9 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -25,6 +25,7 @@ RenderSettings: m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} m_AmbientIntensity: 1 m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} m_SkyboxMaterial: {fileID: 0} m_HaloStrength: 0.5 m_FlareStrength: 1 @@ -38,10 +39,11 @@ RenderSettings: m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 11 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -53,11 +55,10 @@ LightmapSettings: m_EnableBakedLightmaps: 0 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: - serializedVersion: 4 + serializedVersion: 10 m_Resolution: 2 m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 + m_AtlasSize: 1024 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -66,40 +67,62 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_DirectLightInLightProbes: 1 m_FinalGather: 0 m_FinalGatherFiltering: 1 m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 m_LightingDataAsset: {fileID: 0} - m_RuntimeCPUUsage: 25 + m_UseShadowmask: 0 --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: serializedVersion: 2 + agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 agentSlope: 45 agentClimb: 0.4 ledgeDropHeight: 0 maxJumpAcrossDistance: 0 - accuratePlacement: 0 minRegionArea: 2 - cellSize: 0.16666667 manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 m_NavMeshData: {fileID: 0} --- !u!1 &205269089 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 110280, guid: c6289d5f8fa843145a2355af9cb09719, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 224: {fileID: 205269090} - - 222: {fileID: 205269092} - - 114: {fileID: 205269091} + - component: {fileID: 205269090} + - component: {fileID: 205269092} + - component: {fileID: 205269091} m_Layer: 0 m_Name: Offscreen Right m_TagString: Untagged @@ -117,10 +140,10 @@ RectTransform: 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: 1544660787} m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} m_AnchoredPosition: {x: 1300, y: -1000} @@ -166,10 +189,10 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100000, guid: b20518d45890e4be59ba82946f88026c, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 275029864} - - 114: {fileID: 275029863} + - component: {fileID: 275029864} + - component: {fileID: 275029863} m_Layer: 0 m_Name: John m_TagString: Untagged @@ -192,7 +215,6 @@ MonoBehaviour: nameText: John nameColor: {r: 1, g: 1, b: 1, a: 1} soundEffect: {fileID: 0} - profileSprite: {fileID: 21300000, guid: 58bfb145092302e4083ef8a9e4eeb576, type: 3} portraits: - {fileID: 21300000, guid: 58bfb145092302e4083ef8a9e4eeb576, type: 3} - {fileID: 21300000, guid: 820bab66bb5a044ec961ba8ee3b045cc, type: 3} @@ -208,20 +230,20 @@ Transform: 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &534534503 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 110270, guid: c6289d5f8fa843145a2355af9cb09719, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 224: {fileID: 534534504} - - 222: {fileID: 534534506} - - 114: {fileID: 534534505} + - component: {fileID: 534534504} + - component: {fileID: 534534506} + - component: {fileID: 534534505} m_Layer: 0 m_Name: Right m_TagString: Untagged @@ -239,10 +261,10 @@ RectTransform: 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: 1544660787} m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} m_AnchoredPosition: {x: 460.43, y: -1000} @@ -288,11 +310,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 110282, guid: c6289d5f8fa843145a2355af9cb09719, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 224: {fileID: 599196445} - - 222: {fileID: 599196447} - - 114: {fileID: 599196446} + - component: {fileID: 599196445} + - component: {fileID: 599196447} + - component: {fileID: 599196446} m_Layer: 0 m_Name: Left m_TagString: Untagged @@ -310,10 +332,10 @@ RectTransform: 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: 1544660787} m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} m_AnchoredPosition: {x: -460.43, y: -1000} @@ -359,11 +381,11 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 110272, guid: c6289d5f8fa843145a2355af9cb09719, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 224: {fileID: 1085130772} - - 222: {fileID: 1085130774} - - 114: {fileID: 1085130773} + - component: {fileID: 1085130772} + - component: {fileID: 1085130774} + - component: {fileID: 1085130773} m_Layer: 0 m_Name: Offscreen Left m_TagString: Untagged @@ -381,10 +403,10 @@ RectTransform: 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: 1544660787} m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} m_AnchoredPosition: {x: -1300, y: -1000} @@ -430,10 +452,10 @@ GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1226317643} - - 114: {fileID: 1226317642} + - component: {fileID: 1226317643} + - component: {fileID: 1226317642} m_Layer: 0 m_Name: _FungusState m_TagString: Untagged @@ -462,21 +484,21 @@ Transform: 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 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1290383786 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1290383790} - - 114: {fileID: 1290383789} - - 114: {fileID: 1290383788} - - 114: {fileID: 1290383787} + - component: {fileID: 1290383790} + - component: {fileID: 1290383789} + - component: {fileID: 1290383788} + - component: {fileID: 1290383787} m_Layer: 0 m_Name: EventSystem m_TagString: Untagged @@ -537,20 +559,20 @@ Transform: 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: 179.999, y: 179.999, z: 179.999} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 179.999, y: 179.999, z: 179.999} --- !u!1 &1311069593 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 110278, guid: c6289d5f8fa843145a2355af9cb09719, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 224: {fileID: 1311069594} - - 222: {fileID: 1311069595} - - 114: {fileID: 1311069596} + - component: {fileID: 1311069594} + - component: {fileID: 1311069595} + - component: {fileID: 1311069596} m_Layer: 0 m_Name: Middle m_TagString: Untagged @@ -568,10 +590,10 @@ RectTransform: 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: 1544660787} m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} m_AnchoredPosition: {x: 0, y: -1000} @@ -617,13 +639,13 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 110276, guid: c6289d5f8fa843145a2355af9cb09719, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 224: {fileID: 1544660787} - - 223: {fileID: 1544660791} - - 114: {fileID: 1544660790} - - 114: {fileID: 1544660789} - - 225: {fileID: 1544660788} + - component: {fileID: 1544660787} + - component: {fileID: 1544660791} + - component: {fileID: 1544660790} + - component: {fileID: 1544660789} + - component: {fileID: 1544660788} m_Layer: 5 m_Name: Canvas m_TagString: Untagged @@ -641,7 +663,6 @@ RectTransform: 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: 1311069594} - {fileID: 599196445} @@ -650,6 +671,7 @@ RectTransform: - {fileID: 205269090} m_Father: {fileID: 2073331544} m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} @@ -714,7 +736,7 @@ Canvas: m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1544660786} m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_RenderMode: 0 m_Camera: {fileID: 0} m_PlaneDistance: 100 @@ -723,6 +745,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -731,13 +754,13 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1726345443} - - 20: {fileID: 1726345442} - - 92: {fileID: 1726345441} - - 124: {fileID: 1726345440} - - 81: {fileID: 1726345439} + - component: {fileID: 1726345443} + - component: {fileID: 1726345442} + - component: {fileID: 1726345441} + - component: {fileID: 1726345440} + - component: {fileID: 1726345439} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -796,10 +819,12 @@ Camera: m_TargetDisplay: 0 m_TargetEye: 3 m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 - m_StereoMirrorMode: 0 --- !u!4 &1726345443 Transform: m_ObjectHideFlags: 0 @@ -809,19 +834,19 @@ Transform: 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 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1745642867 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 100000, guid: b20518d45890e4be59ba82946f88026c, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1745642869} - - 114: {fileID: 1745642868} + - component: {fileID: 1745642869} + - component: {fileID: 1745642868} m_Layer: 0 m_Name: Sherlock m_TagString: Untagged @@ -844,7 +869,6 @@ MonoBehaviour: nameText: Sherlock nameColor: {r: 1, g: 1, b: 1, a: 1} soundEffect: {fileID: 0} - profileSprite: {fileID: 21300000, guid: b9482ea03e69b5a4aa5e7827da354549, type: 3} portraits: - {fileID: 21300000, guid: b9482ea03e69b5a4aa5e7827da354549, type: 3} - {fileID: 21300000, guid: 7497fd82318972540af8666a234a9685, type: 3} @@ -860,25 +884,25 @@ Transform: 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 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1755499605 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 142980, guid: 5e7fbc8d4eb714b279eeeef2262c1e1a, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 1755499610} - - 114: {fileID: 1755499606} - - 114: {fileID: 1755499608} - - 114: {fileID: 1755499609} - - 114: {fileID: 1755499607} - - 114: {fileID: 1755499611} - - 114: {fileID: 1755499613} - - 114: {fileID: 1755499612} + - component: {fileID: 1755499610} + - component: {fileID: 1755499606} + - component: {fileID: 1755499608} + - component: {fileID: 1755499609} + - component: {fileID: 1755499607} + - component: {fileID: 1755499611} + - component: {fileID: 1755499613} + - component: {fileID: 1755499612} m_Layer: 0 m_Name: Flowchart m_TagString: Untagged @@ -910,9 +934,10 @@ MonoBehaviour: y: -340 width: 1114 height: 859 - selectedBlock: {fileID: 1755499608} + selectedBlocks: + - {fileID: 1755499608} selectedCommands: - - {fileID: 1755499611} + - {fileID: 1755499607} variables: [] description: stepPause: 0 @@ -936,13 +961,12 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: itemId: 1 - errorMessage: indentLevel: 0 conversationText: stringRef: {fileID: 0} stringVal: 'john bored left: Oh, so that''s how you use the Conversation command. - sherlock eyeroll right: Yes, well done John. + sherlock eyeroll right nowait: Yes, well done John. {w=1.5} You catch on quickly don''t you? @@ -954,13 +978,27 @@ MonoBehaviour: -- This is a comment, it doesn''t appear in the conversation - john angry middle: Wait, what! + john angry left nowait: Wait {w=0.6} - left: There''s no need to be rude Sherlock! + middle noclear:, what! + + left nofade: There''s no need to be rude Sherlock! bored: Not like that would stop you. ' + clearPrevious: + booleanRef: {fileID: 0} + booleanVal: 1 + waitForInput: + booleanRef: {fileID: 0} + booleanVal: 1 + waitForSeconds: + floatRef: {fileID: 0} + floatVal: 0 + fadeWhenDone: + booleanRef: {fileID: 0} + booleanVal: 1 --- !u!114 &1755499608 MonoBehaviour: m_ObjectHideFlags: 2 @@ -979,6 +1017,8 @@ MonoBehaviour: y: 70 width: 120 height: 40 + tint: {r: 1, g: 1, b: 1, a: 1} + useCustomTint: 0 itemId: 0 blockName: Start description: @@ -1001,6 +1041,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: parentBlock: {fileID: 1755499608} + waitForFrames: 1 --- !u!4 &1755499610 Transform: m_ObjectHideFlags: 0 @@ -1010,10 +1051,10 @@ Transform: 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1755499611 MonoBehaviour: m_ObjectHideFlags: 2 @@ -1026,7 +1067,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: itemId: 2 - errorMessage: indentLevel: 0 luaEnvironment: {fileID: 0} luaFile: {fileID: 0} @@ -1064,7 +1104,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: itemId: 4 - errorMessage: indentLevel: 0 commenterName: commentText: Example using Conversation function in Lua @@ -1080,7 +1119,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: itemId: 3 - errorMessage: indentLevel: 0 commenterName: commentText: Example using Conversation Command @@ -1089,10 +1127,10 @@ GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 110274, guid: c6289d5f8fa843145a2355af9cb09719, type: 2} m_PrefabInternal: {fileID: 0} - serializedVersion: 4 + serializedVersion: 5 m_Component: - - 4: {fileID: 2073331544} - - 114: {fileID: 2073331543} + - component: {fileID: 2073331544} + - component: {fileID: 2073331543} m_Layer: 0 m_Name: Stage m_TagString: Untagged @@ -1114,10 +1152,10 @@ MonoBehaviour: m_EditorClassIdentifier: portraitCanvas: {fileID: 1544660791} dimPortraits: 1 + dimColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} fadeDuration: 0.75 moveDuration: 1 fadeEaseType: 4 - moveEaseType: 4 shiftOffset: {x: 0, y: 0} defaultPosition: {fileID: 1311069596} positions: @@ -1126,13 +1164,6 @@ MonoBehaviour: - {fileID: 534534504} - {fileID: 1085130772} - {fileID: 205269090} - cachedPositions: - - {fileID: 599196445} - - {fileID: 1311069594} - - {fileID: 534534504} - - {fileID: 1085130772} - - {fileID: 205269090} - charactersOnStage: [] --- !u!4 &2073331544 Transform: m_ObjectHideFlags: 0 @@ -1142,8 +1173,8 @@ Transform: 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: 1544660787} m_Father: {fileID: 0} m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Docs/command_ref/narrative_commands.md b/Docs/command_ref/narrative_commands.md index 3ef6338d..7e737027 100644 --- a/Docs/command_ref/narrative_commands.md +++ b/Docs/command_ref/narrative_commands.md @@ -25,9 +25,14 @@ Wait Until Finished | System.Boolean | Wait until the tween has finished before Display | Fungus.StageDisplayType | Display type # Conversation # {#Conversation} -Do multiple say and portrait commands in a single block of text. Format is: [character] [portrait] [stage position] [: Story text] +Do multiple say and portrait commands in a single block of text. Format is: [character] [portrait] [stage position] [hide] [<<< | >>>] [clear | noclear] [wait | nowait] [fade | nofade] [: Story text] Defined in Fungus.Conversation + +Property | Type | Description + --- | --- | --- +Wait For Seconds | Fungus.FloatData | a wait for seconds added to each item of the conversation. + # Menu # {#Menu} Displays a button in a multiple choice menu diff --git a/Docs/fungus_docs/conversation_system.md b/Docs/fungus_docs/conversation_system.md index ae3befba..7ca80e5e 100644 --- a/Docs/fungus_docs/conversation_system.md +++ b/Docs/fungus_docs/conversation_system.md @@ -38,7 +38,7 @@ sherlock hide: The format for conversation text is: ```text -[character] [portrait] [position] [hide] [<<< | >>>]: [Dialogue text] +[character] [portrait] [position] [hide] [<<< | >>>] [clear | noclear] [wait | nowait] [fade | nofade]: [Dialogue text] ``` - character: The gameobject name or Name Text value of the speaking character. @@ -47,6 +47,9 @@ The format for conversation text is: - hide: Hides the character - <<<: Portrait face left - >>>: Portrait face right +- clear | noclear: override the ClearPreviousLine default with true on clear or with false with noclear +- wait | nowait: override the WaitForInput default with true on wait or with false with nowait +- fade | nofade: override the FadeDone default with true on fade or with false with nofade. This is rarely required as it only really makes a difference on the last say of the conversation anyway. Parameters go on the left of the colon and the dialogue text goes on the right. You can omit any parameter and specify them in any order. Parameters are separated by spaces. If you need to use a name which contains spaces, wrap it in quotation marks e.g. "John Watson". Parameters are case insensitive. Blank lines and comment lines starting with -- are ignored. A line of dialogue text on its own will be spoken by the most recent character. You can omit dialogue text, but remember you still need to add the : character at the end of the line.