diff --git a/Assets/Fungus/Dialog/Commands/AddOption.cs b/Assets/Fungus/Dialog/Commands/AddOption.cs new file mode 100644 index 00000000..df0350a8 --- /dev/null +++ b/Assets/Fungus/Dialog/Commands/AddOption.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Fungus.Script +{ + [CommandName("Add Option")] + [CommandCategory("Dialog")] + [HelpText("Adds an option for the player to select, displayed by the next Say command.")] + public class AddOption : FungusCommand + { + public string optionText; + public Sequence targetSequence; + + public override void OnEnter() + { + Say.SayOption option = new Say.SayOption(); + option.optionText = optionText; + option.targetSequence = targetSequence; + Say.options.Add(option); + + Continue(); + } + + public override string GetSummary() + { + string summaryText = optionText; + + if (targetSequence == null) + { + summaryText += " ( )"; + } + else + { + summaryText += " (" + targetSequence.name + ")"; + } + + return summaryText; + } + + public override void GetConnectedSequences(ref List connectedSequences) + { + if (targetSequence != null) + { + connectedSequences.Add (targetSequence); + } + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/Dialog/Commands/AddOption.cs.meta b/Assets/Fungus/Dialog/Commands/AddOption.cs.meta new file mode 100644 index 00000000..73080a03 --- /dev/null +++ b/Assets/Fungus/Dialog/Commands/AddOption.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a61ea20fbb744ca2a363c33ad65cd89 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Fungus/Dialog/Commands/Say.cs b/Assets/Fungus/Dialog/Commands/Say.cs index 07c458cf..ec0ce07b 100644 --- a/Assets/Fungus/Dialog/Commands/Say.cs +++ b/Assets/Fungus/Dialog/Commands/Say.cs @@ -10,24 +10,22 @@ namespace Fungus.Script public class Say : FungusCommand { static public Dialog dialog; - - public Character character; - public string storyText; - public bool displayOnce; - - [Serializable] + public class SayOption { public string optionText; public Sequence targetSequence; } - public List options = new List(); - - public float timeoutDuration; + static public List options = new List(); + public Character character; + public string storyText; + public bool displayOnce; int executionCount; + public float continueTime; + public override void OnEnter() { if (dialog == null) @@ -73,8 +71,13 @@ namespace Fungus.Script dialogOptions.Add(dialogOption); } + + options.Clear(); - dialog.Say(storyText, dialogOptions); + dialog.Say(storyText, dialogOptions, 0, delegate { + dialog.ShowDialog(false); + Continue(); + }); } else { diff --git a/Assets/Fungus/Dialog/Editor/AddOptionEditor.cs b/Assets/Fungus/Dialog/Editor/AddOptionEditor.cs new file mode 100644 index 00000000..dd8f3b8e --- /dev/null +++ b/Assets/Fungus/Dialog/Editor/AddOptionEditor.cs @@ -0,0 +1,37 @@ +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using Rotorz.ReorderableList; + +namespace Fungus.Script +{ + + [CustomEditor (typeof(AddOption))] + public class AddOptionEditor : FungusCommandEditor + { + public override void DrawCommandGUI() + { + AddOption t = target as AddOption; + + EditorGUI.BeginChangeCheck(); + + string optionText = EditorGUILayout.TextField(new GUIContent("Option Text", "Text display on the option button."), + t.optionText); + + Sequence targetSequence = SequenceEditor.SequenceField(new GUIContent("Target Sequence", "Sequence to execute when this option is selected by the player."), + new GUIContent(""), + t.GetFungusScript(), + t.targetSequence); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(t, "Set Add Option"); + t.optionText = optionText; + t.targetSequence = targetSequence; + } + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/Dialog/Editor/AddOptionEditor.cs.meta b/Assets/Fungus/Dialog/Editor/AddOptionEditor.cs.meta new file mode 100644 index 00000000..cb697c8f --- /dev/null +++ b/Assets/Fungus/Dialog/Editor/AddOptionEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40a93fe42338b42e7a0215379d219400 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Fungus/Dialog/Editor/SayEditor.cs b/Assets/Fungus/Dialog/Editor/SayEditor.cs index 2a1cc334..07ad40e2 100644 --- a/Assets/Fungus/Dialog/Editor/SayEditor.cs +++ b/Assets/Fungus/Dialog/Editor/SayEditor.cs @@ -13,10 +13,6 @@ namespace Fungus.Script { public override void DrawCommandGUI() { - serializedObject.Update(); - - SerializedProperty optionListProperty = serializedObject.FindProperty("options"); - Say t = target as Say; EditorGUI.BeginChangeCheck(); @@ -32,29 +28,16 @@ namespace Fungus.Script bool displayOnce = EditorGUILayout.Toggle(new GUIContent("Display Once", "Display this text once and never show it again."), t.displayOnce); + float continueTime = EditorGUILayout.FloatField(new GUIContent("Continue Time", "Time to wait before executing next command in the sequence. Useful for time limited player choices."), t.continueTime); + if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(t, "Set Say"); t.character = character; t.storyText = text; t.displayOnce = displayOnce; + t.continueTime = continueTime; } - - if (t.options.Count > 0) - { - float timeout = EditorGUILayout.FloatField(new GUIContent("Option Timeout", "Time limit for player to choose an option."), - t.timeoutDuration); - if (timeout != t.timeoutDuration) - { - Undo.RecordObject(t, "Set Timeout"); - t.timeoutDuration = timeout; - } - } - - ReorderableListGUI.Title("Options"); - ReorderableListGUI.ListField(optionListProperty); - - serializedObject.ApplyModifiedProperties(); } } diff --git a/Assets/Fungus/Dialog/Scripts/Dialog.cs b/Assets/Fungus/Dialog/Scripts/Dialog.cs index aafc795c..1e43ccd2 100644 --- a/Assets/Fungus/Dialog/Scripts/Dialog.cs +++ b/Assets/Fungus/Dialog/Scripts/Dialog.cs @@ -113,11 +113,20 @@ namespace Fungus.Script StartCoroutine(WriteText(text, delegate { ShowContinueIcon(true); - StartCoroutine(WaitForInput(onComplete)); + + StartCoroutine(WaitForInput(delegate { + Clear(); + + if (onComplete != null) + { + onComplete(); + } + })); + })); } - public void Say(string text, List