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.

105 lines
2.7 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. protected bool isEditable = false;
  12. [SerializeField]
  13. [Tooltip("Blocks this will run through")]
  14. protected BlockReader 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 void OnDoubleClick()
  51. {
  52. base.OnDoubleClick();
  53. }
  54. #region Serialisation Functions
  55. public override void CopyToken(BlockToken token)
  56. {
  57. base.CopyToken(token);
  58. blockReader = new BlockReader();
  59. foreach (BlockToken subToken in ((CombinedToken)token).subBlocks)
  60. blockReader.Add(subToken.ToLogicBlock());
  61. }
  62. public override BlockToken ToToken(BlockToken token = null)
  63. {
  64. if (token == null)
  65. token = new CombinedToken(this);
  66. CombinedToken retVal = (CombinedToken)base.ToToken(token);
  67. retVal.subBlocks = new BlockToken[blockReader.LogicChain.Count];
  68. for (int i = 0; i < retVal.subBlocks.Length; i++)
  69. retVal.subBlocks[i] = blockReader.LogicChain[i].ToToken();
  70. return retVal;
  71. }
  72. #endregion Serialisation Functions
  73. }
  74. [System.Serializable]
  75. public class CombinedToken : BlockToken
  76. {
  77. public BlockToken[] subBlocks;
  78. public CombinedToken(LogicBlock block) : base(block)
  79. {
  80. }
  81. }