Example #1
0
        public static List <RaycastHit> ArcCast(Transform transform, Cube.Face down, Cube.Face forward, float arc, int iterations, LayerMask?terrainMask = null)
        {
            var forwardVec = forward.Of(transform);
            var downVec    = down.Of(transform);
            var origin     = transform.position;

            return(ArcCast(origin, downVec, forwardVec, arc, iterations, terrainMask));
        }
Example #2
0
 /// <summary>
 /// Returns the the corresponding <see cref="Vector3.normalized"/> <see cref="Vector3"/> that <paramref name="self"/> points to,
 /// e.g. <see cref="Cube.Face"/>.<see cref="Cube.Face.Forward"/>.<see cref="NormalizedVector"/> -> <see cref="Vector3"/>.<see cref="Vector3.forward"/>
 /// </summary>
 /// <param name="self"></param>
 /// <returns></returns>
 /// <exception cref="InvalidEnumArgumentException">If an unknown </exception>
 public static Vector3 NormalizedVector(this Cube.Face self)
 {
     return(self switch {
         Cube.Face.Forward => Vector3.forward,
         Cube.Face.Backward => Vector3.back,
         Cube.Face.Left => Vector3.left,
         Cube.Face.Right => Vector3.right,
         Cube.Face.Up => Vector3.up,
         Cube.Face.Down => Vector3.down,
         _ => throw EnumUtils.InvalidEnumArgumentException(nameof(self), self)
     });
Example #3
0
        public static Vector3 GetFace(this Transform self, Cube.Face face)
        {
            // Rider suggests storing these values rather than repeatedly accessing them. I'm pretty sure they're only accessed once, but whatever.
            var forward = self.forward;
            var right   = self.right;
            var up      = self.up;

            return(face switch {
                Cube.Face.Forward => forward,
                Cube.Face.Backward => - forward,
                Cube.Face.Left => - right,
                Cube.Face.Right => right,
                Cube.Face.Up => up,
                Cube.Face.Down => - up,
                _ => throw EnumUtils.InvalidEnumArgumentException(nameof(face), face)
            });
Example #4
0
        private static Vector3 Of(this Cube.Face face, Transform transform)
        {
            // Dunno why rider thinks this is more efficient, 'cus it definitely isn't
            var forward = transform.forward;
            var right   = transform.right;
            var up      = transform.up;

            return(face switch {
                Cube.Face.Forward => forward,
                Cube.Face.Backward => - forward,
                Cube.Face.Left => - right,
                Cube.Face.Right => right,
                Cube.Face.Up => up,
                Cube.Face.Down => - up,
                _ => throw new ArgumentOutOfRangeException(nameof(face), face, null)
            });