Browse Source

Added AddOption command.

master
chrisgregan 11 years ago
parent
commit
939a15d98a
  1. 47
      Assets/Fungus/Editor/AddOptionCommandEditor.cs
  2. 2
      Assets/Fungus/Editor/AddOptionCommandEditor.cs.meta
  3. 26
      Assets/Fungus/Editor/SayCommandEditor.cs
  4. 26
      Assets/Fungus/Editor/SequenceEditor.cs
  5. 36
      Assets/Fungus/Editor/SetVariableCommandEditor.cs
  6. BIN
      Assets/Fungus/Tests/Sequence/SequenceTest.unity
  7. 47
      Assets/Fungus/VisualScripting/AddOptionCommand.cs
  8. 2
      Assets/Fungus/VisualScripting/AddOptionCommand.cs.meta
  9. 4
      Assets/Fungus/VisualScripting/CompareCommand.cs
  10. 10
      Assets/Fungus/VisualScripting/FungusCommand.cs
  11. 53
      Assets/Fungus/VisualScripting/IfBooleanCommand.cs
  12. 39
      Assets/Fungus/VisualScripting/SayCommand.cs
  13. 4
      Assets/Fungus/VisualScripting/Sequence.cs
  14. 22
      Assets/Fungus/VisualScripting/SetBooleanCommand.cs
  15. 4
      Assets/Fungus/VisualScripting/SetVariableCommand.cs
  16. 2
      Assets/Fungus/VisualScripting/WaitCommand.cs

47
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;
}
}
}
}
}

2
Assets/Fungus/VisualScripting/IfBooleanCommand.cs.meta → Assets/Fungus/Editor/AddOptionCommandEditor.cs.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f4a1d934106ae48ab9c8cc28424bd27e
guid: a20371077211a4cc394cb2192fdc4417
MonoImporter:
serializedVersion: 2
defaultReferences: []

26
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;
}
}
}
}
*/
}

26
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<string> keys = new List<string>();
keys.Add("<None>");
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];
}
}

36
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<string> keys = new List<string>();
keys.Add("<None>");
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 == "<None>")
@ -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;

BIN
Assets/Fungus/Tests/Sequence/SequenceTest.unity

Binary file not shown.

47
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<Sequence> connectedSequences)
{
if (sequence != null)
{
connectedSequences.Add(sequence);
}
}
}
}

2
Assets/Fungus/VisualScripting/SetBooleanCommand.cs.meta → Assets/Fungus/VisualScripting/AddOptionCommand.cs.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1f96fe7b67189415a9884c596c55e96c
guid: 74826d5144cf64adeb6dd522f32dfb94
MonoImporter:
serializedVersion: 2
defaultReferences: []

4
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<Sequence> connectedSequences)

10
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);
}

53
Assets/Fungus/VisualScripting/IfBooleanCommand.cs

@ -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<Sequence> connectedSequences)
{
if (trueSequence != null)
{
connectedSequences.Add(trueSequence);
}
if (falseSequence != null)
{
connectedSequences.Add(falseSequence);
}
}
}
}

39
Assets/Fungus/VisualScripting/SayCommand.cs

@ -5,55 +5,24 @@ using System.Collections.Generic;
namespace Fungus
{
public class SayCommand : FungusCommand
{
public string text;
public List<Sequence> options = new List<Sequence>();
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<Sequence> connectedSequences)
{
foreach (Sequence sequence in options)
{
if (sequence != null)
{
connectedSequences.Add(sequence);
}
}
}
}
}

4
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;

22
Assets/Fungus/VisualScripting/SetBooleanCommand.cs

@ -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();
}
}
}

4
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();
}
}

2
Assets/Fungus/VisualScripting/WaitCommand.cs

@ -16,7 +16,7 @@ namespace Fungus
void OnWaitComplete()
{
Finish();
Continue();
}
}

Loading…
Cancel
Save