From 939a15d98abfe9d747b1925c9a1109d96abdcc06 Mon Sep 17 00:00:00 2001 From: chrisgregan Date: Thu, 31 Jul 2014 17:03:27 +0100 Subject: [PATCH] Added AddOption command. --- .../Fungus/Editor/AddOptionCommandEditor.cs | 47 ++++++++++++++++ .../AddOptionCommandEditor.cs.meta} | 2 +- Assets/Fungus/Editor/SayCommandEditor.cs | 26 ++++++--- Assets/Fungus/Editor/SequenceEditor.cs | 26 +++++++++ .../Fungus/Editor/SetVariableCommandEditor.cs | 36 ++++-------- .../Fungus/Tests/Sequence/SequenceTest.unity | Bin 74140 -> 76032 bytes .../VisualScripting/AddOptionCommand.cs | 47 ++++++++++++++++ ...mmand.cs.meta => AddOptionCommand.cs.meta} | 2 +- .../Fungus/VisualScripting/CompareCommand.cs | 4 +- .../Fungus/VisualScripting/FungusCommand.cs | 10 +++- .../VisualScripting/IfBooleanCommand.cs | 53 ------------------ Assets/Fungus/VisualScripting/SayCommand.cs | 39 ++----------- Assets/Fungus/VisualScripting/Sequence.cs | 4 +- .../VisualScripting/SetBooleanCommand.cs | 22 -------- .../VisualScripting/SetVariableCommand.cs | 4 +- Assets/Fungus/VisualScripting/WaitCommand.cs | 2 +- 16 files changed, 171 insertions(+), 153 deletions(-) create mode 100644 Assets/Fungus/Editor/AddOptionCommandEditor.cs rename Assets/Fungus/{VisualScripting/IfBooleanCommand.cs.meta => Editor/AddOptionCommandEditor.cs.meta} (78%) create mode 100644 Assets/Fungus/VisualScripting/AddOptionCommand.cs rename Assets/Fungus/VisualScripting/{SetBooleanCommand.cs.meta => AddOptionCommand.cs.meta} (78%) delete mode 100644 Assets/Fungus/VisualScripting/IfBooleanCommand.cs delete mode 100644 Assets/Fungus/VisualScripting/SetBooleanCommand.cs diff --git a/Assets/Fungus/Editor/AddOptionCommandEditor.cs b/Assets/Fungus/Editor/AddOptionCommandEditor.cs new file mode 100644 index 00000000..87519c76 --- /dev/null +++ b/Assets/Fungus/Editor/AddOptionCommandEditor.cs @@ -0,0 +1,47 @@ +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace Fungus +{ + + [CustomEditor (typeof(AddOptionCommand))] + public class AddOptionCommandEditor : FungusCommandEditor + { + public override void DrawCommandInspectorGUI() + { + AddOptionCommand t = target as AddOptionCommand; + + EditorGUI.BeginChangeCheck(); + + string newText = EditorGUILayout.TextField(new GUIContent("Text", "Text to display on option button"), t.text); + Sequence newSequence = SequenceEditor.SequenceField(new GUIContent("Sequence", "Sequence to execute when this option is selected"), + t.GetParentFungusScript(), + t.sequence); + AddOptionCommand.Condition newCondition = (AddOptionCommand.Condition)EditorGUILayout.EnumPopup(new GUIContent("Condition", "Conditions for when this option is displayed"), t.condition); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(t, "Set AddOption command"); + + t.text = newText; + t.sequence = newSequence; + t.condition = newCondition; + } + + if (t.condition == AddOptionCommand.Condition.ShowOnBoolean || + t.condition == AddOptionCommand.Condition.HideOnBoolean) + { + string newBooleanVariableKey = EditorGUILayout.TextField(new GUIContent("Boolean Variable Key", "Boolean variable to check for condition"), t.booleanVariableKey); + if (newBooleanVariableKey != t.booleanVariableKey) + { + Undo.RecordObject(t, "Set Boolean Variable"); + t.booleanVariableKey = newBooleanVariableKey; + } + } + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/VisualScripting/IfBooleanCommand.cs.meta b/Assets/Fungus/Editor/AddOptionCommandEditor.cs.meta similarity index 78% rename from Assets/Fungus/VisualScripting/IfBooleanCommand.cs.meta rename to Assets/Fungus/Editor/AddOptionCommandEditor.cs.meta index ff8b7943..a50987ce 100644 --- a/Assets/Fungus/VisualScripting/IfBooleanCommand.cs.meta +++ b/Assets/Fungus/Editor/AddOptionCommandEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f4a1d934106ae48ab9c8cc28424bd27e +guid: a20371077211a4cc394cb2192fdc4417 MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/Assets/Fungus/Editor/SayCommandEditor.cs b/Assets/Fungus/Editor/SayCommandEditor.cs index c13b2467..f090beb7 100644 --- a/Assets/Fungus/Editor/SayCommandEditor.cs +++ b/Assets/Fungus/Editor/SayCommandEditor.cs @@ -3,14 +3,26 @@ using UnityEditorInternal; using UnityEngine; using System.Collections; using System.Collections.Generic; -using Fungus; -/* -[CustomEditor (typeof(SayCommand))] -public class SayCommandEditor : Editor +namespace Fungus { - public override void OnInspectorGUI() + + [CustomEditor (typeof(SayCommand))] + public class SayCommandEditor : FungusCommandEditor { + public override void DrawCommandInspectorGUI() + { + SayCommand t = target as SayCommand; + + EditorGUILayout.PrefixLabel(new GUIContent("Say Text", "Text to display in dialog")); + EditorStyles.textField.wordWrap = true; + string text = EditorGUILayout.TextArea(t.text); + if (text != t.text) + { + Undo.RecordObject(t, "Set Text"); + t.text = text; + } + } } -} -*/ \ No newline at end of file + +} \ No newline at end of file diff --git a/Assets/Fungus/Editor/SequenceEditor.cs b/Assets/Fungus/Editor/SequenceEditor.cs index e6ab674a..ad5c30c8 100644 --- a/Assets/Fungus/Editor/SequenceEditor.cs +++ b/Assets/Fungus/Editor/SequenceEditor.cs @@ -45,4 +45,30 @@ public class SequenceEditor : Editor return result; } + + static public string VariableField(GUIContent label, FungusScript fungusScript, string variableKey, ref VariableType variableType) + { + List keys = new List(); + keys.Add(""); + int index = 0; + for (int i = 0; i < fungusScript.variables.Count; ++i) + { + Variable v = fungusScript.variables[i]; + keys.Add(v.key); + if (v.key == variableKey && + index == 0) + { + index = i + 1; + } + } + + int newIndex = EditorGUILayout.Popup(label.text, index, keys.ToArray()); + + if (newIndex > 0) + { + variableType = fungusScript.variables[newIndex - 1].type; + } + + return keys[newIndex]; + } } \ No newline at end of file diff --git a/Assets/Fungus/Editor/SetVariableCommandEditor.cs b/Assets/Fungus/Editor/SetVariableCommandEditor.cs index a37ba0c1..c6daab3f 100644 --- a/Assets/Fungus/Editor/SetVariableCommandEditor.cs +++ b/Assets/Fungus/Editor/SetVariableCommandEditor.cs @@ -13,34 +13,22 @@ namespace Fungus { SetVariableCommand t = target as SetVariableCommand; - FungusScript sc = t.GetParentFungusScript(); - if (sc == null) + FungusScript fungusScript = t.GetParentFungusScript(); + if (fungusScript == null) { return; } - List keys = new List(); - keys.Add(""); - int index = 0; - for (int i = 0; i < sc.variables.Count; ++i) + VariableType variableType = VariableType.Boolean; + string variableKey = SequenceEditor.VariableField(new GUIContent("Variable", "Variable to set"), + fungusScript, + t.variableKey, + ref variableType); + + if (variableKey != t.variableKey) { - Variable v = sc.variables[i]; - keys.Add(v.key); - if (v.key == t.variableKey && - index == 0) - { - index = i + 1; - } - } - - int newIndex = EditorGUILayout.Popup("Variable", index, keys.ToArray()); - - bool keyChanged = (t.variableKey != keys[newIndex]); - - if (keyChanged) - { - Undo.RecordObject(t, "Select variable"); - t.variableKey = keys[newIndex]; + Undo.RecordObject(t, "Set Variable Key"); + t.variableKey = variableKey; } if (t.variableKey == "") @@ -48,8 +36,6 @@ namespace Fungus return; } - VariableType variableType = sc.variables[newIndex - 1].type; - bool booleanValue = t.booleanData.value; int integerValue = t.integerData.value; float floatValue = t.floatData.value; diff --git a/Assets/Fungus/Tests/Sequence/SequenceTest.unity b/Assets/Fungus/Tests/Sequence/SequenceTest.unity index d6ff97a73a2efa3751efddcc1adbfd735b581c9d..07d3d89f30bf812245d2d772d5924d5140d2ee89 100644 GIT binary patch delta 1222 zcmY+@dq`7J90%}oa+_Ld)3)}o^5!aZ)>_g-F>;yM#EShPYGviB-}(K1_p&Raimq|R z3PP1wB?MPCVjBIF!0W1a zbrKw(G_yOICT1MVVZIycL?3;BdJBj%@b+YJlD8W1a_wFfo^Yr*qRX`g1YyUw~0 zXTYemw6Gr7c`1+QFM7`Cw}O>|8(04YOk(Qd7ePU{RO@mVVPEO*S_%V91ENMwFW?e#v8RX+8S&8vs#h2 zt$0FP^S5?#WMXeo)%e4@40bxPG Y8uu1ZK`CAkXst3_O^8{1Ezo=a07j@zr~m)} delta 1077 zcmY+@ZAepL6bJBga+@zi$X=YzoSRn8nXed0NX`|sC}~8}Dh*c_2D+&&HH5YxD5Ai; zAMQ+p2!at2tDDXG5Q-6f3NZr_sn5|Dd(oi6^}l*Y*TKVc?vHbxbDqmxWL7gat=Uer z8YH%l5m6@MA?#FJv8$ryd^N2mlSwO{mjr*2Q+kyC>7g_^`aVs_wx>%o)%RHV{p^~t z@7&o?u$O|}p$oylMM6n(hhS|k)|Q}>g&vnd7|qILhtOy?2%jJ8ghRTltag9MPZ>xk z749@|6XuQ>g?OJ{*xhK5u1Limc1sWb6f^szw|~nx+>S(fmR{^9t~)&rJ&_Nw+)K8T zun6oJVvVv+!RBEtcwSNRj0?99)){aHjFn}AMPav;I=Mav<}eaP5ici`;k72w(3ZoK zz{^UZe833IWg@Ca{8MRi7Z!ol!G0(<3Y&lpz~+=S2CK?hA22oa>~NlU2&NwJ!*Dpy zy989r(UoOyjZ2J3>QZr26N&D~fVfOW$>$V2Jc<$|yYB`@`+OOLxc zvh#?phE)eTfl**5?3+?t2FtJzMPN&c?S$QcshgC;W?<@zRKgtj>u)C2c<-xN;6Ch< z(l;#MrU96{mB@?um(s)q>ww9_q>A0Jd6>HKKA5dwW8*1PQ{Mn=5r=G4 zqBkmwTP$Y=ZTA1u$iqCfSO%l8c2#2uMnxMx%;zv4Onu{VSRB@(s;wMf;c|`mLd%7T zqgvMMnZ#BzH|e}nL{Hp_xS4Box;@iGH{GH)lWpQ;0dE$KR<4pi9THtuHj4E*ur^pC zX5|3$JJD?8R&mkB``IMg?QG1q1%my^-y|2|C;yq`eZfD{kcip2mYEVCi?~FK0hUX+ QN!#Hj>Jbk(_~lxoe+I)G-v9sr diff --git a/Assets/Fungus/VisualScripting/AddOptionCommand.cs b/Assets/Fungus/VisualScripting/AddOptionCommand.cs new file mode 100644 index 00000000..ebcb5e61 --- /dev/null +++ b/Assets/Fungus/VisualScripting/AddOptionCommand.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace Fungus +{ + + public class AddOptionCommand : FungusCommand + { + public enum Condition + { + AlwaysShow, + HideOnVisited, + ShowOnBoolean, + HideOnBoolean + } + + public string text; + public Sequence sequence; + public Condition condition; + public string booleanVariableKey; + + public override void OnEnter() + { + Dialog dialog = Game.GetInstance().dialog; + if (dialog != null && + sequence != null) + { + dialog.AddOption(text, () => { + Stop(); + parentFungusScript.ExecuteSequence(sequence); + }); + } + Continue(); + } + + public override void GetConnectedSequences(ref List connectedSequences) + { + if (sequence != null) + { + connectedSequences.Add(sequence); + } + } + + } + +} \ No newline at end of file diff --git a/Assets/Fungus/VisualScripting/SetBooleanCommand.cs.meta b/Assets/Fungus/VisualScripting/AddOptionCommand.cs.meta similarity index 78% rename from Assets/Fungus/VisualScripting/SetBooleanCommand.cs.meta rename to Assets/Fungus/VisualScripting/AddOptionCommand.cs.meta index f96c5afb..edfc8ed3 100644 --- a/Assets/Fungus/VisualScripting/SetBooleanCommand.cs.meta +++ b/Assets/Fungus/VisualScripting/AddOptionCommand.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1f96fe7b67189415a9884c596c55e96c +guid: 74826d5144cf64adeb6dd522f32dfb94 MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/Assets/Fungus/VisualScripting/CompareCommand.cs b/Assets/Fungus/VisualScripting/CompareCommand.cs index 5d8185cb..a399c259 100644 --- a/Assets/Fungus/VisualScripting/CompareCommand.cs +++ b/Assets/Fungus/VisualScripting/CompareCommand.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using System.Collections; using System.Collections.Generic; @@ -130,7 +130,7 @@ namespace Fungus } } - Finish(); + Continue(); } public override void GetConnectedSequences(ref List connectedSequences) diff --git a/Assets/Fungus/VisualScripting/FungusCommand.cs b/Assets/Fungus/VisualScripting/FungusCommand.cs index fbbb8230..b061473b 100644 --- a/Assets/Fungus/VisualScripting/FungusCommand.cs +++ b/Assets/Fungus/VisualScripting/FungusCommand.cs @@ -57,16 +57,22 @@ namespace Fungus OnEnter(); } - public virtual void Finish() + public virtual void Continue() { OnExit(); parentSequence.ExecuteNextCommand(this); } + public virtual void Stop() + { + OnExit(); + parentSequence.Stop(); + } + public virtual void ExecuteSequence(Sequence s) { OnExit(); - parentSequence.Finish(); + parentSequence.Stop(); parentFungusScript.ExecuteSequence(s); } diff --git a/Assets/Fungus/VisualScripting/IfBooleanCommand.cs b/Assets/Fungus/VisualScripting/IfBooleanCommand.cs deleted file mode 100644 index e23c7814..00000000 --- a/Assets/Fungus/VisualScripting/IfBooleanCommand.cs +++ /dev/null @@ -1,53 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Fungus -{ - - public class IfBooleanCommand : FungusCommand - { - public string key; - - public Sequence trueSequence; - public Sequence falseSequence; - - public override void OnEnter() - { - if (Variables.GetBoolean(key)) - { - ExecuteSequence(trueSequence); - } - else - { - ExecuteSequence(falseSequence); - } - } - - public void OnDrawGizmos() - { - if (trueSequence == null || falseSequence == null) - { - errorMessage = "Please select true and false Sequence objects"; - } - else - { - errorMessage = ""; - } - } - - public override void GetConnectedSequences(ref List connectedSequences) - { - if (trueSequence != null) - { - connectedSequences.Add(trueSequence); - } - if (falseSequence != null) - { - connectedSequences.Add(falseSequence); - } - } - } - -} \ No newline at end of file diff --git a/Assets/Fungus/VisualScripting/SayCommand.cs b/Assets/Fungus/VisualScripting/SayCommand.cs index 6ae307f4..108fe932 100644 --- a/Assets/Fungus/VisualScripting/SayCommand.cs +++ b/Assets/Fungus/VisualScripting/SayCommand.cs @@ -5,55 +5,24 @@ using System.Collections.Generic; namespace Fungus { - public class SayCommand : FungusCommand { public string text; - public List options = new List(); - public override void OnEnter() { Dialog dialog = Game.GetInstance().dialog; - - foreach (Sequence sequence in options) + if (dialog == null) { - Sequence s = sequence; - - dialog.AddOption(sequence.titleText, () => { - ExecuteSequence(s); - }); + Continue(); + return; } dialog.Say (text, delegate { - Finish(); + Continue(); }); } - public void OnDrawGizmos() - { - errorMessage = ""; - int i = 0; - foreach (Sequence sequence in options) - { - if (sequence == null) - { - errorMessage = "Please select a Sequence for option " + i; - break; - } - } - } - - public override void GetConnectedSequences(ref List connectedSequences) - { - foreach (Sequence sequence in options) - { - if (sequence != null) - { - connectedSequences.Add(sequence); - } - } - } } } \ No newline at end of file diff --git a/Assets/Fungus/VisualScripting/Sequence.cs b/Assets/Fungus/VisualScripting/Sequence.cs index 7c6c0d8c..df2727b0 100644 --- a/Assets/Fungus/VisualScripting/Sequence.cs +++ b/Assets/Fungus/VisualScripting/Sequence.cs @@ -89,7 +89,7 @@ namespace Fungus if (nextCommand == null) { - Finish(); + Stop(); } else { @@ -113,7 +113,7 @@ namespace Fungus command.Execute(); } - public void Finish() + public void Stop() { activeCommand = null; fungusScript.activeSequence = null; diff --git a/Assets/Fungus/VisualScripting/SetBooleanCommand.cs b/Assets/Fungus/VisualScripting/SetBooleanCommand.cs deleted file mode 100644 index 147e8375..00000000 --- a/Assets/Fungus/VisualScripting/SetBooleanCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Fungus -{ - - public class SetBooleanCommand : FungusCommand - { - public string key; - - public bool value; - - public override void OnEnter() - { - Variables.SetBoolean(key, value); - Finish(); - } - } - -} \ No newline at end of file diff --git a/Assets/Fungus/VisualScripting/SetVariableCommand.cs b/Assets/Fungus/VisualScripting/SetVariableCommand.cs index ea04a86c..4b695897 100644 --- a/Assets/Fungus/VisualScripting/SetVariableCommand.cs +++ b/Assets/Fungus/VisualScripting/SetVariableCommand.cs @@ -18,7 +18,7 @@ public class SetVariableCommand : FungusCommand { if (variableKey.Length == 0) { - Finish(); + Continue(); return; } @@ -46,6 +46,6 @@ public class SetVariableCommand : FungusCommand } } - Finish(); + Continue(); } } diff --git a/Assets/Fungus/VisualScripting/WaitCommand.cs b/Assets/Fungus/VisualScripting/WaitCommand.cs index fe761468..2958563e 100644 --- a/Assets/Fungus/VisualScripting/WaitCommand.cs +++ b/Assets/Fungus/VisualScripting/WaitCommand.cs @@ -16,7 +16,7 @@ namespace Fungus void OnWaitComplete() { - Finish(); + Continue(); } }