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: