using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// Class which reads a a list of logic blocks and applies to a character
|
|
/// </summary>
|
|
public class BlockReader : MonoBehaviour
|
|
{
|
|
|
|
#region Inspector Variables
|
|
[SerializeField]
|
|
[Tooltip("Character to be controllered by the Logic Chain")]
|
|
protected Character character;
|
|
|
|
[SerializeField]
|
|
[Tooltip("List of LogicBlocks which will affected this character")]
|
|
protected List<LogicBlock> LogicChain;
|
|
#endregion Inspector Variables
|
|
|
|
#region Read-only Variables
|
|
/// <summary>
|
|
/// returns true if all LogicBlocks in LogicChain have been completed
|
|
/// </summary>
|
|
public bool Finished { get { return currentBlockIndex >= LogicChain.Count; } }
|
|
#endregion Read-only Variables
|
|
|
|
#region Private Variables
|
|
private int currentBlockIndex;//Block currently on
|
|
#endregion Private Variables
|
|
|
|
#region Class Implementation
|
|
/// <summary>
|
|
/// Resets Block reader;
|
|
/// </summary>
|
|
public void Reset()
|
|
{
|
|
currentBlockIndex = 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reads the current block in the logic chain
|
|
/// </summary>
|
|
/// <returns>Returns false if other readers should wait for this one to run again</returns>
|
|
[ContextMenu("Do Read")]
|
|
public bool Read()
|
|
{
|
|
//return that this is done if no more blocks left in chain
|
|
if (LogicChain.Count <= currentBlockIndex)
|
|
return true;
|
|
|
|
//get current Block
|
|
LogicBlock currentBlock = LogicChain[currentBlockIndex];
|
|
|
|
//apply blocks to character
|
|
currentBlock.Run(character);
|
|
|
|
//if the block is finished reset it and move on to next one
|
|
//(it might not be finished if it is a for loop or something)
|
|
if (currentBlock.isFinished())
|
|
{
|
|
currentBlock.Reset();
|
|
currentBlockIndex++;
|
|
}
|
|
|
|
//Should other readers wait for this one
|
|
return (currentBlock.isFinished() || !currentBlock.WaitUntilFinished);
|
|
}
|
|
#endregion
|
|
}
|
|
|