// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). // 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; 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. /// IFlowchart 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(); } }