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.

114 lines
2.9 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("Is this block editable")]
  11. //public bool isEditable = false;
  12. [SerializeField]
  13. [Tooltip("Blocks this will run through")]
  14. public BlockReader blockReader = new BlockReader();
  15. #endregion Inspector Variables
  16. #region Private Variables
  17. #endregion Private Variables
  18. public override bool Run(Character player, float animationTime)
  19. {
  20. BlockLogic(player,animationTime);
  21. if (blockReader.Finished)
  22. {
  23. blockReader.Reset();
  24. RepeatCount++;
  25. }
  26. return isFinished();
  27. }
  28. protected override void BlockLogic(Character player, float animationTime)
  29. {
  30. blockReader.Read(player,animationTime);
  31. }
  32. /// <summary>
  33. /// Returns the block that the character will endUp on after they use this logic element
  34. /// </summary>
  35. /// <param name="startBlock">block character is on</param>
  36. /// <param name="layerMask">layers to ignore</param>
  37. /// <returns>block which character will finish on after performing this function </returns>
  38. public override Block GetEndBlock(Block startBlock, Transform transform, LayerMask layerMask)
  39. {
  40. return blockReader.CurrentBlock.GetEndBlock(startBlock, transform, layerMask);
  41. }
  42. /// <summary>
  43. /// Resets the block to be ready to used again
  44. /// </summary>
  45. public override void Reset()
  46. {
  47. base.Reset();
  48. blockReader.Reset();
  49. }
  50. public override LogicBlock Clone()
  51. {
  52. CombinedBlock retVal = base.Clone() as CombinedBlock;
  53. retVal.blockReader = new BlockReader();
  54. foreach (LogicBlock block in blockReader.LogicChain)
  55. retVal.blockReader.Add(block.Clone());
  56. return retVal;
  57. }
  58. #region Serialisation Functions
  59. public override void CopyToken(BlockToken token)
  60. {
  61. base.CopyToken(token);
  62. blockReader = new BlockReader();
  63. foreach (BlockToken subToken in ((CombinedToken)token).subBlocks)
  64. blockReader.Add(subToken.ToLogicBlock());
  65. }
  66. public override BlockToken ToToken(BlockToken token = null)
  67. {
  68. if (token == null)
  69. token = new CombinedToken(this);
  70. CombinedToken retVal = (CombinedToken)base.ToToken(token);
  71. retVal.subBlocks = new BlockToken[blockReader.LogicChain.Count];
  72. for (int i = 0; i < retVal.subBlocks.Length; i++)
  73. retVal.subBlocks[i] = blockReader.LogicChain[i].ToToken();
  74. return retVal;
  75. }
  76. #endregion Serialisation Functions
  77. }
  78. [System.Serializable]
  79. public class CombinedToken : BlockToken
  80. {
  81. public BlockToken[] subBlocks;
  82. public CombinedToken(LogicBlock block) : base(block)
  83. {
  84. }
  85. }