using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// Class which reads a a list of logic blocks and applies to a character /// 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 LogicChain; #endregion Inspector Variables #region Read-only Variables /// /// returns true if all LogicBlocks in LogicChain have been completed /// 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 /// /// Resets Block reader; /// public void Reset() { currentBlockIndex = 0; } /// /// Reads the current block in the logic chain /// /// Returns false if other readers should wait for this one to run again [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 }