|
|
- 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
- }
-
|