An easy to use Unity 3D library for creating illustrated Interactive Fiction games and more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.7 KiB

// 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 System.Collections;
using System.Collections.Generic;
namespace Fungus
{
/// <summary>
/// Execution state of a Block.
/// </summary>
public enum ExecutionState
{
Idle,
Executing,
}
/// <summary>
/// A container for a sequence of Fungus comands.
/// </summary>
public interface IBlock
{
/// <summary>
/// The execution state of the Block.
/// </summary>
ExecutionState State { get; }
/// <summary>
/// Unique identifier for the Block.
/// </summary>
int ItemId { get; set; }
/// <summary>
/// The name of the block node as displayed in the Flowchart window.
/// </summary>
string BlockName { get; set; }
/// <summary>
/// Description text to display under the block node
/// </summary>
string Description { get; }
/// <summary>
/// An optional Event Handler which can execute the block when an event occurs.
/// Note: Using the concrete class instead of the interface here because of weird editor behaviour.
/// </summary>
EventHandler _EventHandler { get; set; }
/// <summary>
/// The currently executing command.
/// </summary>
Command ActiveCommand { get; }
/// <summary>
/// Timer for fading Block execution icon.
/// </summary>
float ExecutingIconTimer { get; set; }
/// <summary>
/// The list of commands in the sequence.
/// </summary>
List<Command> CommandList { get; }
/// <summary>
/// Controls the next command to execute in the block execution coroutine.
/// </summary>
int JumpToCommandIndex { set; }
/// <summary>
/// Returns the parent Flowchart for this Block.
/// </summary>
IFlowchart GetFlowchart();
/// <summary>
/// Returns true if the Block is executing a command.
/// </summary>
bool IsExecuting();
/// <summary>
/// Returns the number of times this Block has executed.
/// </summary>
int GetExecutionCount();
/// <summary>
/// Start a coroutine which executes all commands in the Block. Only one running instance of each Block is permitted.
/// </summary>
void StartExecution();
/// <summary>
/// A coroutine method that executes all commands in the Block. Only one running instance of each Block is permitted.
/// </summary>
/// <param name="commandIndex">Index of command to start execution at</param>
/// <param name="onComplete">Delegate function to call when execution completes</param>
IEnumerator Execute(int commandIndex = 0, System.Action onComplete = null);
/// <summary>
/// Stop executing commands in this Block.
/// </summary>
void Stop();
/// <summary>
/// Returns a list of all Blocks connected to this one.
/// </summary>
List<Block> GetConnectedBlocks();
/// <summary>
/// Returns the type of the previously executing command.
/// </summary>
/// <returns>The previous active command type.</returns>
System.Type GetPreviousActiveCommandType();
/// <summary>
/// Recalculate the indent levels for all commands in the list.
/// </summary>
void UpdateIndentLevels();
}
}