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.

93 lines
2.4 KiB

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. [CreateAssetMenu(menuName = "Major Project/Combined Block")]
  5. [System.Serializable]
  6. public class CombinedBlock : LogicBlock
  7. {
  8. #region Inspector Variables
  9. [SerializeField]
  10. [Tooltip("Blocks this will run through")]
  11. protected BlockReader blockReader;
  12. #endregion Inspector Variables
  13. #region Private Variables
  14. #endregion Private Variables
  15. public override bool Run(Character player, float animationTime)
  16. {
  17. BlockLogic(player,animationTime);
  18. if (blockReader.Finished)
  19. {
  20. blockReader.Reset();
  21. RepeatCount++;
  22. }
  23. return isFinished();
  24. }
  25. protected override void BlockLogic(Character player, float animationTime)
  26. {
  27. blockReader.Read(player,animationTime);
  28. }
  29. /// <summary>
  30. /// Returns the block that the character will endUp on after they use this logic element
  31. /// </summary>
  32. /// <param name="startBlock">block character is on</param>
  33. /// <param name="layerMask">layers to ignore</param>
  34. /// <returns>block which character will finish on after performing this function </returns>
  35. public override Block GetEndBlock(Block startBlock, Transform transform, LayerMask layerMask)
  36. {
  37. return blockReader.CurrentBlock.GetEndBlock(startBlock, transform, layerMask);
  38. }
  39. /// <summary>
  40. /// Resets the block to be ready to used again
  41. /// </summary>
  42. public override void Reset()
  43. {
  44. base.Reset();
  45. blockReader.Reset();
  46. }
  47. public override void CopyToken(BlockToken token)
  48. {
  49. base.CopyToken(token);
  50. blockReader = new BlockReader();
  51. foreach (BlockToken subToken in ((CombinedToken)token).subBlocks)
  52. blockReader.Add(subToken.ToLogicBlock());
  53. }
  54. public override BlockToken ToToken(BlockToken token = null)
  55. {
  56. if (token == null)
  57. token = new CombinedToken(this);
  58. CombinedToken retVal = (CombinedToken)base.ToToken(token);
  59. retVal.subBlocks = new BlockToken[blockReader.LogicChain.Count];
  60. for (int i = 0; i < retVal.subBlocks.Length; i++)
  61. retVal.subBlocks[i] = blockReader.LogicChain[i].ToToken();
  62. return retVal;
  63. }
  64. }
  65. [System.Serializable]
  66. public class CombinedToken : BlockToken
  67. {
  68. public BlockToken[] subBlocks;
  69. public CombinedToken(LogicBlock block) : base(block)
  70. {
  71. }
  72. }