HyCodeYourTale
classpublicPriority 3

Rotate

com.hypixel.hytale.builtin.buildertools.tooloperations.transform.Rotate

implements Transform

4

Methods

4

Public Methods

2

Fields

2

Constructors

Constants

TransformFACING_EAST= Z_90
TransformFACING_NORTH= X_90
TransformFACING_SOUTH= X_90.then(Y_180)
TransformFACING_WEST= Z_90.then(Y_180)
TransformX_180= new Rotate(Axis.X, 180)
TransformX_270= new Rotate(Axis.X, 270)
TransformX_90= new Rotate(Axis.X, 90)
TransformY_180= new Rotate(Axis.Y, 180)
TransformY_270= new Rotate(Axis.Y, 270)
TransformY_90= new Rotate(Axis.Y, 90)
TransformZ_180= new Rotate(Axis.Z, 180)
TransformZ_270= new Rotate(Axis.Z, 270)
TransformZ_90= new Rotate(Axis.Z, 90)

Constructors

public
Rotate(Axis axis)
public
Rotate(Axis axis, int angle)

Methods

Public Methods (4)

public
void apply(Vector3i vector3i)
@Override
publicstatic
Transform forAxisAndAngle(BrushAxis axis, Rotation angle)
publicstatic
Transform forDirection(Vector3i direction, Rotation angle)
public
String toString()
@Nonnull@Override

Fields

Private/Package Fields (2)

privateAxis axis
privateint rotations

Inheritance

Parent
Current
Interface
Child

Use mouse wheel to zoom, drag to pan. Click nodes to navigate.

Related Classes

Source Code

package com.hypixel.hytale.builtin.buildertools.tooloperations.transform;

import com.hypixel.hytale.math.Axis;
import com.hypixel.hytale.math.vector.Vector3i;
import com.hypixel.hytale.protocol.Rotation;
import com.hypixel.hytale.protocol.packets.buildertools.BrushAxis;
import javax.annotation.Nonnull;

public class Rotate implements Transform {
   public static final Transform X_90 = new Rotate(Axis.X, 90);
   public static final Transform X_180 = new Rotate(Axis.X, 180);
   public static final Transform X_270 = new Rotate(Axis.X, 270);
   public static final Transform Y_90 = new Rotate(Axis.Y, 90);
   public static final Transform Y_180 = new Rotate(Axis.Y, 180);
   public static final Transform Y_270 = new Rotate(Axis.Y, 270);
   public static final Transform Z_90 = new Rotate(Axis.Z, 90);
   public static final Transform Z_180 = new Rotate(Axis.Z, 180);
   public static final Transform Z_270 = new Rotate(Axis.Z, 270);
   public static final Transform FACING_NORTH = X_90;
   public static final Transform FACING_EAST = Z_90;
   public static final Transform FACING_SOUTH = X_90.then(Y_180);
   public static final Transform FACING_WEST = Z_90.then(Y_180);
   private final Axis axis;
   private final int rotations;

   public Rotate(Axis axis) {
      this(axis, 90);
   }

   public Rotate(Axis axis, int angle) {
      angle = Math.floorMod(angle, 360);
      int rotations = angle / 90;
      this.axis = axis;
      this.rotations = rotations;
   }

   @Override
   public void apply(@Nonnull Vector3i vector3i) {
      if (this.rotations == 1) {
         this.axis.rotate(vector3i);
      } else if (this.rotations > 1) {
         for (int i = 0; i < this.rotations; i++) {
            this.axis.rotate(vector3i);
         }
      }
   }

   @Nonnull
   @Override
   public String toString() {
      return "Rotate{axis=" + this.axis + ", rotations=" + this.rotations + "}";
   }

   public static Transform forDirection(@Nonnull Vector3i direction, Rotation angle) {
      if (direction.getX() < 0) {
         return selectRotation(angle, FACING_WEST, FACING_NORTH, FACING_EAST, FACING_SOUTH);
      } else if (direction.getX() > 0) {
         return selectRotation(angle, FACING_EAST, FACING_SOUTH, FACING_WEST, FACING_NORTH);
      } else if (direction.getZ() < 0) {
         return selectRotation(angle, FACING_NORTH, FACING_EAST, FACING_SOUTH, FACING_WEST);
      } else {
         return direction.getZ() > 0 ? selectRotation(angle, FACING_SOUTH, FACING_WEST, FACING_NORTH, FACING_EAST) : NONE;
      }
   }

   public static Transform forAxisAndAngle(BrushAxis axis, Rotation angle) {
      if (axis == BrushAxis.X) {
         return selectRotation(angle, NONE, X_90, X_180, X_270);
      } else if (axis == BrushAxis.Y) {
         return selectRotation(angle, NONE, Y_90, Y_180, Y_270);
      } else {
         return axis == BrushAxis.Z ? selectRotation(angle, NONE, Z_90, Z_180, Z_270) : NONE;
      }
   }

   private static Transform selectRotation(Rotation angle, Transform rotate0, Transform rotate90, Transform rotate180, Transform rotate270) {
      if (angle == Rotation.Ninety) {
         return rotate90;
      } else if (angle == Rotation.OneEighty) {
         return rotate180;
      } else {
         return angle == Rotation.TwoSeventy ? rotate270 : rotate0;
      }
   }
}