diff --git a/Assets/Fungus/Scripts/Commands/Condition.cs b/Assets/Fungus/Scripts/Commands/Condition.cs
index 0e20dcf8..5af13b89 100644
--- a/Assets/Fungus/Scripts/Commands/Condition.cs
+++ b/Assets/Fungus/Scripts/Commands/Condition.cs
@@ -13,8 +13,6 @@ namespace Fungus
{
protected End endCommand;
- #region Public members
-
public override void OnEnter()
{
if (ParentBlock == null)
@@ -88,7 +86,6 @@ namespace Fungus
}
}
- #endregion
protected End FindOurEndCommand()
{
diff --git a/Assets/Fungus/Scripts/Commands/VariableCondition.cs b/Assets/Fungus/Scripts/Commands/VariableCondition.cs
index eb341109..bf0f64f2 100644
--- a/Assets/Fungus/Scripts/Commands/VariableCondition.cs
+++ b/Assets/Fungus/Scripts/Commands/VariableCondition.cs
@@ -1,13 +1,12 @@
// This code is part of the Fungus library (https://github.com/snozbot/fungus)
// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE)
-using UnityEngine;
using System.Collections.Generic;
-using System.Text;
+using System.Text;
+using UnityEngine;
namespace Fungus
{
-
///
/// class for a single condition. A list of this is used for multiple conditions.
///
@@ -20,35 +19,30 @@ namespace Fungus
public virtual AnyVariableAndDataPair AnyVar { get { return anyVar; } }
public virtual CompareOperator CompareOperator { get { return compareOperator; } }
- public ConditionExpression(){}
- public ConditionExpression(CompareOperator op, AnyVariableAndDataPair variablePair)
+ public ConditionExpression()
{
+ }
+ public ConditionExpression(CompareOperator op, AnyVariableAndDataPair variablePair)
+ {
compareOperator = op;
anyVar = variablePair;
-
- }
-
+ }
}
-
- // anyone with a better name for this can update it
- public enum AnyOrAllConditions
- {
- AnyOneTrue,
- AllTrue
- }
public abstract class VariableCondition : Condition, ISerializationCallbackReceiver
- {
-
- [Tooltip("Selecting \"Any One True\" will result in true if atleast one of the conditions is true. Selecting \"All True\" will result in true only when all the conditions are true.")]
+ {
+ public enum AnyOrAll
+ {
+ AnyOf_OR,//Use as a chain of ORs
+ AllOf_AND,//Use as a chain of ANDs
+ }
- [SerializeField] protected AnyOrAllConditions anyOrAllConditions;
-
+ [Tooltip("Selecting AnyOf will result in true if at least one of the conditions is true. Selecting AllOF will result in true only when all the conditions are true.")]
+ [SerializeField] protected AnyOrAll anyOrAllConditions;
[SerializeField] protected List conditions = new List();
-
///
/// Called when the script is loaded or a value is changed in the
/// inspector (Called in the editor only).
@@ -66,7 +60,7 @@ namespace Fungus
{
conditions.Add(new ConditionExpression());
}
- }
+ }
protected override bool EvaluateCondition()
{
@@ -76,10 +70,10 @@ namespace Fungus
}
bool resultAny = false, resultAll = true;
- foreach (ConditionExpression condition in conditions)
+ foreach (ConditionExpression condition in conditions)
{
bool curResult = false;
- if (condition.AnyVar == null)
+ if (condition.AnyVar == null)
{
resultAll &= curResult;
resultAny |= curResult;
@@ -90,8 +84,8 @@ namespace Fungus
resultAny |= curResult;
}
- if (anyOrAllConditions == AnyOrAllConditions.AnyOneTrue) return resultAny;
-
+ if (anyOrAllConditions == AnyOrAll.AnyOf_OR) return resultAny;
+
return resultAll;
}
@@ -102,26 +96,16 @@ namespace Fungus
return false;
}
- foreach (ConditionExpression condition in conditions)
+ foreach (ConditionExpression condition in conditions)
{
if (condition.AnyVar == null || condition.AnyVar.variable == null)
{
return false;
}
-
}
return true;
}
-
- #region Public members
-
- ///
- /// The type of comparison operation to be performed.
- ///
- public virtual CompareOperator CompareOperator { get { return conditions[0].CompareOperator; } }
-
- public virtual List Conditions { get { return conditions; } }
-
+
public override string GetSummary()
{
if (!this.HasNeededProperties())
@@ -130,7 +114,7 @@ namespace Fungus
}
string connector = "";
- if (anyOrAllConditions == AnyOrAllConditions.AnyOneTrue)
+ if (anyOrAllConditions == AnyOrAll.AnyOf_OR)
{
connector = " OR ";
}
@@ -139,11 +123,11 @@ namespace Fungus
connector = " AND ";
}
- StringBuilder summary = new StringBuilder("");
- for (int i = 0 ; i < conditions.Count; i++)
+ StringBuilder summary = new StringBuilder("");
+ for (int i = 0; i < conditions.Count; i++)
{
- summary.Append(conditions[i].AnyVar.variable.Key + " " +
- VariableUtil.GetCompareOperatorDescription(conditions[i].CompareOperator) + " " +
+ summary.Append(conditions[i].AnyVar.variable.Key + " " +
+ VariableUtil.GetCompareOperatorDescription(conditions[i].CompareOperator) + " " +
conditions[i].AnyVar.GetDataDescription());
if (i < conditions.Count - 1)
@@ -159,17 +143,15 @@ namespace Fungus
return anyVar.HasReference(variable);
}
- #endregion
#region backwards compat
[HideInInspector]
[SerializeField] protected CompareOperator compareOperator;
- [HideInInspector]
+ [HideInInspector]
[SerializeField] protected AnyVariableAndDataPair anyVar;
-
[Tooltip("Variable to use in expression")]
[VariableProperty(AllVariableTypes.VariableAny.Any)]
[SerializeField] protected Variable variable;
@@ -221,8 +203,8 @@ namespace Fungus
[Tooltip("Vector3 value to compare against")]
[SerializeField] protected Vector3Data vector3Data;
-
- void ISerializationCallbackReceiver.OnBeforeSerialize()
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
{
}
@@ -322,18 +304,17 @@ namespace Fungus
if (anyVar != null && anyVar.variable != null)
{
- ConditionExpression c = new ConditionExpression(compareOperator,anyVar);
+ ConditionExpression c = new ConditionExpression(compareOperator, anyVar);
if (!conditions.Contains(c))
{
conditions.Add(c);
}
- }
- if (anyVar != null && anyVar.variable == null)
- {
anyVar = null;
+ variable = null;
}
}
- #endregion
+
+ #endregion backwards compat
}
-}
+}
\ No newline at end of file
diff --git a/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs b/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs
index 1bb21769..47e328b8 100644
--- a/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs
+++ b/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs
@@ -3,11 +3,15 @@
using UnityEditor;
using UnityEngine;
-using System.Collections.Generic;
namespace Fungus.EditorUtils
{
- [CustomEditor (typeof(VariableCondition), true)]
+ ///
+ /// Handles custom drawing for ConditionExperssions within the VariableCondition and inherited commands.
+ ///
+ /// TODO; refactor to allow a propertydrawer on ConditionExperssion and potentially list as reorderable
+ ///
+ [CustomEditor(typeof(VariableCondition), true)]
public class VariableConditionEditor : CommandEditor
{
public static readonly GUIContent None = new GUIContent("");
@@ -17,7 +21,7 @@ namespace Fungus.EditorUtils
None,
};
- static readonly GUIContent[] compareListAll = new GUIContent[]
+ private static readonly GUIContent[] compareListAll = new GUIContent[]
{
new GUIContent(VariableUtil.GetCompareOperatorDescription(CompareOperator.Equals)),
new GUIContent(VariableUtil.GetCompareOperatorDescription(CompareOperator.NotEquals)),
@@ -27,68 +31,58 @@ namespace Fungus.EditorUtils
new GUIContent(VariableUtil.GetCompareOperatorDescription(CompareOperator.GreaterThanOrEquals)),
};
- static readonly GUIContent[] compareListEqualOnly = new GUIContent[]
+ private static readonly GUIContent[] compareListEqualOnly = new GUIContent[]
{
new GUIContent(VariableUtil.GetCompareOperatorDescription(CompareOperator.Equals)),
new GUIContent(VariableUtil.GetCompareOperatorDescription(CompareOperator.NotEquals)),
};
- // protected SerializedProperty compareOperatorProp;
- // protected SerializedProperty anyVarProp;
-
- protected SerializedProperty conditions;
-
- protected Dictionary propByVariableType;
+ protected SerializedProperty conditions;
public override void OnEnable()
{
base.OnEnable();
- // compareOperatorProp = serializedObject.FindProperty("compareOperator");
- // anyVarProp = serializedObject.FindProperty("anyVar");
-
conditions = serializedObject.FindProperty("conditions");
-
-
}
public override void DrawCommandGUI()
{
serializedObject.Update();
- EditorGUILayout.PropertyField(serializedObject.FindProperty("anyOrAllConditions"));
+ EditorGUILayout.PropertyField(serializedObject.FindProperty("anyOrAllConditions"));
conditions.arraySize = EditorGUILayout.IntField("Size", conditions.arraySize);
- GUILayout.Label("Conditions",EditorStyles.boldLabel);
-
- for (int i = 0; i < conditions.arraySize; i++)
- {
- EditorGUI.indentLevel++;
- VariableCondition t = target as VariableCondition;
+ GUILayout.Label("Conditions", EditorStyles.boldLabel);
- var flowchart = (Flowchart)t.GetFlowchart();
- if (flowchart == null)
- {
- return;
- }
+ VariableCondition t = target as VariableCondition;
+
+ var flowchart = (Flowchart)t.GetFlowchart();
+ if (flowchart == null)
+ {
+ return;
+ }
- // EditorGUILayout.PropertyField(anyVarProp, true);
+ EditorGUI.indentLevel++;
+ for (int i = 0; i < conditions.arraySize; i++)
+ {
var conditionAnyVar = conditions.GetArrayElementAtIndex(i).FindPropertyRelative("anyVar");
var conditionCompare = conditions.GetArrayElementAtIndex(i).FindPropertyRelative("compareOperator");
-
- EditorGUILayout.PropertyField(conditionAnyVar,new GUIContent("Variable"),true);
+
+ EditorGUILayout.PropertyField(conditionAnyVar, new GUIContent("Variable"), true);
// Get selected variable
Variable selectedVariable = conditionAnyVar.FindPropertyRelative("variable").objectReferenceValue as Variable;
+
+ if (selectedVariable == null)
+ continue;
+
GUIContent[] operatorsList = emptyList;
- if (selectedVariable != null)
- {
- operatorsList = selectedVariable.IsComparisonSupported() ? compareListAll : compareListEqualOnly;
- }
-
+ operatorsList = selectedVariable.IsComparisonSupported() ? compareListAll : compareListEqualOnly;
+
// Get previously selected operator
- int selectedIndex = (int)t.Conditions[i].CompareOperator;
- if (selectedIndex < 0)
+ int selectedIndex = conditionCompare.enumValueIndex;
+ if (selectedIndex < 0 || selectedIndex >= operatorsList.Length)
{
// Default to first index if the operator is not found in the available operators list
// This can occur when changing between variable types
@@ -100,15 +94,12 @@ namespace Fungus.EditorUtils
selectedIndex,
operatorsList);
- if (selectedVariable != null)
- {
- conditionCompare.enumValueIndex = selectedIndex;
- }
+ conditionCompare.enumValueIndex = selectedIndex;
- EditorGUI.indentLevel--;
- GUILayout.Space(10f);
+ EditorGUILayout.Separator();
}
+ EditorGUI.indentLevel--;
serializedObject.ApplyModifiedProperties();
}
}
-}
+}
\ No newline at end of file