/// <summary> /// Converts a <see cref="RefinementDirection"/> into a <see cref="Vector3"/>. /// </summary> /// <param name="direction"> /// The <see cref="RefinementDirection"/> to convert. /// </param> /// <returns> /// The <see cref="Vector3"/> that represents the direction. /// </returns> static public Vector3 ToVector(this RefinementDirection direction) { switch (direction) { case RefinementDirection.Forward: return(Vector3.forward); case RefinementDirection.Back: return(Vector3.back); case RefinementDirection.Down: return(Vector3.down); case RefinementDirection.Left: return(Vector3.left); case RefinementDirection.Right: return(Vector3.right); case RefinementDirection.Up: return(Vector3.up); default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {direction}"); } }
/// <summary> /// Nudges the transform in the specified direction. /// </summary> /// <param name="direction"> /// The direction to nudge in. /// </param> public void Nudge(RefinementDirection direction) { // Figure out which actual direction RefinementDirection actualDireciton = direction.RelativeTo(forwardDirection); // Create the offset Vector3 offset = actualDireciton.ToVector() * directionAmount; // Update the position using the correct coordinate space (local vs world) TargetTransform.Translate(offset, space); }
/// <summary> /// Attempts to convert a <see cref="Vector3"/> into a <see cref="RefinementDirection"/>. /// </summary> /// <param name="vector"> /// The <see cref="Vector3"/> to convert. /// </param> /// <param name="direction"> /// The output <see cref="RefinementDirection"/> if successfully converted. /// </param> /// <returns> /// <c>true</c> if the conversion was successful; otherwise <c>false</c>. /// </returns> static public bool TryGetDirection(this Vector3 vector, out RefinementDirection direction) { // Default to forward direction = RefinementDirection.Forward; // What is the vector? if (vector == Vector3.back) { direction = RefinementDirection.Back; return(true); } else if (vector == Vector3.down) { direction = RefinementDirection.Down; return(true); } else if (vector == Vector3.forward) { direction = RefinementDirection.Forward; return(true); } else if (vector == Vector3.left) { direction = RefinementDirection.Left; return(true); } else if (vector == Vector3.right) { direction = RefinementDirection.Right; return(true); } else if (vector == Vector3.up) { direction = RefinementDirection.Up; return(true); } // No conversion possible return(false); }
/// <summary> /// Gets a direction relative to the specified direction. /// </summary> /// <param name="direction"> /// The direction used to obtain the relative direction. /// </param> /// <returns> /// The relative direction. /// </returns> static public RefinementDirection RelativeTo(this RefinementDirection direction, RefinementDirection relative) { switch (relative) { case RefinementDirection.Forward: // Facing Forward switch (direction) { case RefinementDirection.Forward: return(RefinementDirection.Forward); // Facing Forward Looking Forward is Forward case RefinementDirection.Back: return(RefinementDirection.Back); // Facing Forward Looking Back is Back case RefinementDirection.Down: return(RefinementDirection.Down); // Facing Forward Looking Down is Down case RefinementDirection.Left: return(RefinementDirection.Left); // Facing Forward Looking Left is Left case RefinementDirection.Right: return(RefinementDirection.Right); // Facing Forward Looking Right is Right case RefinementDirection.Up: return(RefinementDirection.Up); // Facing Forward Looking Up is Up default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {relative}"); } case RefinementDirection.Back: // Back Looking switch (direction) { case RefinementDirection.Forward: return(RefinementDirection.Back); // Facing Back Looking Forward is Back case RefinementDirection.Back: return(RefinementDirection.Forward); // Facing Back Looking Back is Forward case RefinementDirection.Down: return(RefinementDirection.Down); // Facing Back Looking Down is Down case RefinementDirection.Left: return(RefinementDirection.Right); // Facing Back Looking Left is Right case RefinementDirection.Right: return(RefinementDirection.Left); // Facing Back Looking Right is Left case RefinementDirection.Up: return(RefinementDirection.Up); // Facing Back Looking Up is Up default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {relative}"); } case RefinementDirection.Down: // Facing Down switch (direction) { case RefinementDirection.Forward: return(RefinementDirection.Down); // Facing Down Looking Forward is Down case RefinementDirection.Back: return(RefinementDirection.Up); // Facing Back Looking Back is Up case RefinementDirection.Down: return(RefinementDirection.Back); // Facing Down Looking Down is Back case RefinementDirection.Left: return(RefinementDirection.Left); // Facing Down Looking Left is Left case RefinementDirection.Right: return(RefinementDirection.Right); // Facing Down Looking Right is Right case RefinementDirection.Up: return(RefinementDirection.Forward); // Facing Down Looking Up is Forward default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {relative}"); } case RefinementDirection.Left: // Facing Left switch (direction) { case RefinementDirection.Forward: return(RefinementDirection.Left); // Facing Left Looking Forward is Left case RefinementDirection.Back: return(RefinementDirection.Right); // Facing Left Looking Back is Right case RefinementDirection.Down: return(RefinementDirection.Down); // Facing Left Looking Down is Down case RefinementDirection.Left: return(RefinementDirection.Back); // Facing Left Looking Left is Back case RefinementDirection.Right: return(RefinementDirection.Forward); // Facing Left Looking Right is Forward case RefinementDirection.Up: return(RefinementDirection.Up); // Facing Left Looking Up is Up default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {relative}"); } case RefinementDirection.Right: // Facing Right switch (direction) { case RefinementDirection.Forward: return(RefinementDirection.Right); // Facing Right Looking Forward is Forward case RefinementDirection.Back: return(RefinementDirection.Left); // Facing Right Looking Back is Left case RefinementDirection.Down: return(RefinementDirection.Down); // Facing Right Looking Down is Down case RefinementDirection.Left: return(RefinementDirection.Forward); // Facing Right Looking Left is Forward case RefinementDirection.Right: return(RefinementDirection.Back); // Facing Right Looking Right is Back case RefinementDirection.Up: return(RefinementDirection.Up); // Facing Right Looking Up is Up default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {relative}"); } case RefinementDirection.Up: // Facing Up switch (direction) { case RefinementDirection.Forward: return(RefinementDirection.Up); // Facing Up Looking Forward is Up case RefinementDirection.Back: return(RefinementDirection.Down); // Facing Up Looking Back is Down case RefinementDirection.Down: return(RefinementDirection.Forward); // Facing Up Looking Down is Forward case RefinementDirection.Left: return(RefinementDirection.Left); // Facing Up Looking Left is Left case RefinementDirection.Right: return(RefinementDirection.Right); // Facing Up Looking Right is Right case RefinementDirection.Up: return(RefinementDirection.Back); // Facing Up Looking Up is Back default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {relative}"); } default: throw new InvalidOperationException($"Unknown {nameof(RefinementDirection)}: {direction}"); } }