using System.Collections; using UnityEngine; /// /// Logic block which deals with moving a character in a direction /// [CreateAssetMenu(menuName = "Major Project/Rotate Block")] [System.Serializable] public class Rotate : LogicBlock { #region Inspector Fields [SerializeField] [Header("Rotate Settings")] [Tooltip("Direction to rotate in")] protected Direction direction; [SerializeField] [Tooltip("Angle in Degrees")] protected int Angle = 90; #endregion Inspector Fields #region Class Functions /// /// Rotates the player in the direction specified by this block /// /// Player to rotate protected override IEnumerator BlockLogic(Character player, float animationTime, bool useBlockDirection = false) { yield return player.StartCoroutine(player.RotateInDirection(direction,Angle, Character.Animation.Jump, 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) { //no movement when rotating return startBlock; } public override void CopyToken(BlockToken token) { base.CopyToken(token); direction = ((RotateToken)token).direction; Angle = ((RotateToken)token).angle; } public override BlockToken ToToken(BlockToken token = null) { if (token == null) token = new RotateToken(this); RotateToken retVal = (RotateToken)base.ToToken(token); retVal.direction = direction; retVal.angle = Angle; return retVal; } #endregion Class Functions } [System.Serializable] public class RotateToken : BlockToken { public Direction direction; public int angle; public RotateToken(LogicBlock block) : base(block) { } }