using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Major Project/Combined Block")] [System.Serializable] public class CombinedBlock : LogicBlock { #region Inspector Variables [SerializeField] [Tooltip("Blocks this will run through")] protected BlockReader blockReader; #endregion Inspector Variables #region Private Variables #endregion Private Variables public override bool Run(Character player, float animationTime) { BlockLogic(player,animationTime); if (blockReader.Finished) { blockReader.Reset(); RepeatCount++; } return isFinished(); } protected override void BlockLogic(Character player, float animationTime) { blockReader.Read(player,animationTime); } /// /// Returns the block that the character will endUp on after they use this logic element /// /// block character is on /// layers to ignore /// block which character will finish on after performing this function public override Block GetEndBlock(Block startBlock, Transform transform, LayerMask layerMask) { return blockReader.CurrentBlock.GetEndBlock(startBlock, transform, layerMask); } /// /// Resets the block to be ready to used again /// public override void Reset() { base.Reset(); blockReader.Reset(); } public override void CopyToken(BlockToken token) { base.CopyToken(token); blockReader = new BlockReader(); foreach (BlockToken subToken in ((CombinedToken)token).subBlocks) blockReader.Add(subToken.ToLogicBlock()); } public override BlockToken ToToken(BlockToken token = null) { if (token == null) token = new CombinedToken(this); CombinedToken retVal = (CombinedToken)base.ToToken(token); retVal.subBlocks = new BlockToken[blockReader.LogicChain.Count]; for (int i = 0; i < retVal.subBlocks.Length; i++) retVal.subBlocks[i] = blockReader.LogicChain[i].ToToken(); return retVal; } } [System.Serializable] public class CombinedToken : BlockToken { public BlockToken[] subBlocks; public CombinedToken(LogicBlock block) : base(block) { } }