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)); }
/// <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) });
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) });
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) });