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.
70 lines
1.6 KiB
70 lines
1.6 KiB
using UnityEngine; |
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
|
|
namespace Fungus |
|
{ |
|
// Manages a sequential list of commands. |
|
// When a command completes, the next command is popped from the queue and exectuted. |
|
public class CommandQueue : MonoBehaviour |
|
{ |
|
// Base class for commands used with the CommandQueue |
|
public abstract class Command |
|
{ |
|
public abstract void Execute(CommandQueue commandQueue, Action onComplete); |
|
} |
|
|
|
List<Command> commandList = new List<Command>(); |
|
|
|
// Adds a command to the queue for later execution |
|
public virtual void AddCommand(Command command) |
|
{ |
|
commandList.Add(command); |
|
} |
|
|
|
// Clears all queued commands from the list |
|
public virtual void Reset() |
|
{ |
|
commandList.Clear(); |
|
} |
|
|
|
// Executes the first command in the queue. |
|
// When this command completes, the next command in the queue is executed. |
|
public virtual void Execute() |
|
{ |
|
if (commandList.Count == 0) |
|
{ |
|
return; |
|
} |
|
|
|
Command command = commandList[0]; |
|
|
|
command.Execute(this, delegate { |
|
commandList.RemoveAt(0); |
|
Execute(); |
|
}); |
|
} |
|
|
|
// Calls a named method on a game object to populate the command queue. |
|
// The command queue is then executed. |
|
public void CallCommandMethod(GameObject target, string methodName) |
|
{ |
|
Reset(); |
|
target.SendMessage(methodName, SendMessageOptions.DontRequireReceiver); |
|
Execute(); |
|
} |
|
|
|
// Calls an Action delegate method to populate the command queue. |
|
// The command queue is then executed. |
|
public void CallCommandMethod(Action method) |
|
{ |
|
Reset(); |
|
if (method != null) |
|
{ |
|
method(); |
|
} |
|
Execute(); |
|
} |
|
} |
|
} |