diff --git a/Assets/Fungus/Flowchart/Scripts/Command.cs b/Assets/Fungus/Flowchart/Scripts/Command.cs
index d0971fb7..b6b83314 100644
--- a/Assets/Fungus/Flowchart/Scripts/Command.cs
+++ b/Assets/Fungus/Flowchart/Scripts/Command.cs
@@ -37,29 +37,34 @@ namespace Fungus
///
/// Base class for Commands. Commands can be added to Blocks to create an execution sequence.
///
- public class Command : MonoBehaviour
+ public class Command : MonoBehaviour, ICommand
{
+ [FormerlySerializedAs("commandId")]
+ [HideInInspector]
+ [SerializeField] protected int itemId = -1; // Invalid flowchart item id
+
+ [HideInInspector]
+ [SerializeField] protected int indentLevel;
+
+ protected string errorMessage = "";
+
+ #region ICommand implementation
+
///
/// Unique identifier for this command.
/// Unique for this Flowchart.
///
- [FormerlySerializedAs("commandId")]
- [HideInInspector]
- [SerializeField] protected int itemId = -1; // Invalid flowchart item id
public virtual int ItemId { get { return itemId; } set { itemId = value; } }
///
/// Error message to display in the command inspector.
///
- protected string errorMessage = "";
public virtual string ErrorMessage { get { return errorMessage; } }
///
/// Indent depth of the current commands.
/// Commands are indented inside If, While, etc. sections.
///
- [HideInInspector]
- [SerializeField] protected int indentLevel;
public virtual int IndentLevel { get { return indentLevel; } set { indentLevel = value; } }
///
@@ -276,5 +281,7 @@ namespace Fungus
return localizationId;
}
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/Assets/Fungus/Flowchart/Scripts/ICommand.cs b/Assets/Fungus/Flowchart/Scripts/ICommand.cs
new file mode 100644
index 00000000..699ff8a5
--- /dev/null
+++ b/Assets/Fungus/Flowchart/Scripts/ICommand.cs
@@ -0,0 +1,163 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+namespace Fungus
+{
+ ///
+ /// Commands can be added to Blocks to create an execution sequence.
+ ///
+ public interface ICommand
+ {
+ ///
+ /// Unique identifier for this command.
+ /// Unique for this Flowchart.
+ ///
+ int ItemId { get; set; }
+
+ ///
+ /// Error message to display in the command inspector.
+ ///
+ string ErrorMessage { get; }
+
+ ///
+ /// Indent depth of the current commands.
+ /// Commands are indented inside If, While, etc. sections.
+ ///
+ int IndentLevel { get; set; }
+
+ ///
+ /// Index of the command in the parent block's command list.
+ ///
+ int CommandIndex { get; set; }
+
+ ///
+ /// Set to true by the parent block while the command is executing.
+ ///
+ bool IsExecuting { get; set; }
+
+ ///
+ /// Timer used to control appearance of executing icon in inspector.
+ ///
+ float ExecutingIconTimer { get; set; }
+
+ ///
+ /// Reference to the Block object that this command belongs to.
+ /// This reference is only populated at runtime and in the editor when the
+ /// block is selected.
+ ///
+ Block ParentBlock { get; set; }
+
+ ///
+ /// Returns the Flowchart that this command belongs to.
+ ///
+ Flowchart GetFlowchart();
+
+ ///
+ /// Execute the command.
+ ///
+ void Execute();
+
+ ///
+ /// End execution of this command and continue execution at the next command.
+ ///
+ void Continue();
+
+ ///
+ /// End execution of this command and continue execution at a specific command index.
+ ///
+ /// Next command index.
+ void Continue(int nextCommandIndex);
+
+ ///
+ /// Stops the parent Block executing.
+ ///
+ void StopParentBlock();
+
+ ///
+ /// Called when the parent block has been requested to stop executing, and
+ /// this command is the currently executing command.
+ /// Use this callback to terminate any asynchronous operations and
+ /// cleanup state so that the command is ready to execute again later on.
+ ///
+ void OnStopExecuting();
+
+ ///
+ /// Called when the new command is added to a block in the editor.
+ ///
+ void OnCommandAdded(Block parentBlock);
+
+ ///
+ /// Called when the command is deleted from a block in the editor.
+ ///
+ void OnCommandRemoved(Block parentBlock);
+
+ ///
+ /// Called when this command starts execution.
+ ///
+ void OnEnter();
+
+ ///
+ /// Called when this command ends execution.
+ ///
+ void OnExit();
+
+ ///
+ /// Called when this command is reset. This happens when the Reset command is used.
+ ///
+ void OnReset();
+
+ ///
+ /// Populates a list with the Blocks that this command references.
+ ///
+ void GetConnectedBlocks(ref List connectedBlocks);
+
+ ///
+ /// Returns true if this command references the variable.
+ /// Used to highlight variables in the variable list when a command is selected.
+ ///
+ bool HasReference(Variable variable);
+
+ ///
+ /// Returns the summary text to display in the command inspector.
+ ///
+ string GetSummary();
+
+ ///
+ /// Returns the help text to display for this command.
+ ///
+ string GetHelpText();
+
+ ///
+ /// Return true if this command opens a block of commands. Used for indenting commands.
+ ///
+ bool OpenBlock();
+
+ ///
+ /// Return true if this command closes a block of commands. Used for indenting commands.
+ ///
+ bool CloseBlock();
+
+ ///
+ /// Return the color for the command background in inspector.
+ ///
+ /// The button color.
+ Color GetButtonColor();
+
+ ///
+ /// Returns true if the specified property should be displayed in the inspector.
+ /// This is useful for hiding certain properties based on the value of another property.
+ ///
+ bool IsPropertyVisible(string propertyName);
+
+ ///
+ /// Returns true if the specified property should be displayed as a reorderable list in the inspector.
+ /// This only applies for array properties and has no effect for non-array properties.
+ ///
+ bool IsReorderableArray(string propertyName);
+
+ ///
+ /// Returns the localization id for the Flowchart that contains this command.
+ ///
+ string GetFlowchartLocalizationId();
+ }
+}
diff --git a/Assets/Fungus/Flowchart/Scripts/ICommand.cs.meta b/Assets/Fungus/Flowchart/Scripts/ICommand.cs.meta
new file mode 100644
index 00000000..6b85918e
--- /dev/null
+++ b/Assets/Fungus/Flowchart/Scripts/ICommand.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 189c3f33fdd4b47608ac0aa3a2b971bb
+timeCreated: 1473856401
+licenseType: Free
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: