use expression switches

This commit is contained in:
dfsek
2021-09-26 13:16:43 -07:00
parent 3de02c5d63
commit 8f51707505
39 changed files with 366 additions and 687 deletions

View File

@@ -9,19 +9,19 @@ import com.dfsek.terra.api.util.generic.Lazy;
public interface EnumProperty<T extends Enum<T>> extends Property<T> {
static <T extends Enum<T>> EnumProperty<T> of(String name, Class<T> clazz) {
return new EnumProperty<T>() {
return new EnumProperty<>() {
private final Lazy<Collection<T>> constants = Lazy.lazy(() -> Arrays.asList(clazz.getEnumConstants()));
@Override
public Collection<T> values() {
return constants.value();
}
@Override
public Class<T> getType() {
return clazz;
}
@Override
public String getName() {
return name;

View File

@@ -28,32 +28,21 @@ public enum Direction {
}
public Direction rotate(Rotation rotation) {
switch(this) {
case UP:
case DOWN:
return this;
default:
return rotations[(this.rotation + rotation.getDegrees() / 90) % 4];
}
return switch(this) {
case UP, DOWN -> this;
default -> rotations[(this.rotation + rotation.getDegrees() / 90) % 4];
};
}
public Direction opposite() {
switch(this) {
case DOWN:
return UP;
case UP:
return DOWN;
case EAST:
return WEST;
case WEST:
return EAST;
case NORTH:
return SOUTH;
case SOUTH:
return NORTH;
}
throw new IllegalStateException();
return switch(this) {
case DOWN -> UP;
case UP -> DOWN;
case EAST -> WEST;
case WEST -> EAST;
case NORTH -> SOUTH;
case SOUTH -> NORTH;
};
}
public int getModX() {

View File

@@ -16,33 +16,22 @@ public enum Rotation {
}
public static Rotation fromDegrees(int deg) {
switch(FastMath.floorMod(deg, 360)) {
case 0:
return Rotation.NONE;
case 90:
return Rotation.CW_90;
case 180:
return Rotation.CW_180;
case 270:
return Rotation.CCW_90;
default:
throw new IllegalArgumentException();
}
return switch(FastMath.floorMod(deg, 360)) {
case 0 -> Rotation.NONE;
case 90 -> Rotation.CW_90;
case 180 -> Rotation.CW_180;
case 270 -> Rotation.CCW_90;
default -> throw new IllegalArgumentException();
};
}
public Rotation inverse() {
switch(this) {
case NONE:
return NONE;
case CCW_90:
return CW_90;
case CW_90:
return CCW_90;
case CW_180:
return CW_180;
default:
throw new IllegalArgumentException();
}
return switch(this) {
case NONE -> NONE;
case CCW_90 -> CW_90;
case CW_90 -> CCW_90;
case CW_180 -> CW_180;
};
}
public Rotation rotate(Rotation rotation) {

View File

@@ -23,15 +23,9 @@ public final class RotationUtil {
public static void rotateVector(Vector2 orig, Rotation r) {
Vector2 copy = orig.clone();
switch(r) {
case CW_90:
copy.setX(orig.getZ()).setZ(-orig.getX());
break;
case CCW_90:
copy.setX(-orig.getZ()).setZ(orig.getX());
break;
case CW_180:
copy.multiply(-1);
break;
case CW_90 -> copy.setX(orig.getZ()).setZ(-orig.getX());
case CCW_90 -> copy.setX(-orig.getZ()).setZ(orig.getX());
case CW_180 -> copy.multiply(-1);
}
orig.setX(copy.getX());
orig.setZ(copy.getZ());
@@ -64,74 +58,44 @@ public final class RotationUtil {
public static RailShape getRotatedRail(RailShape orig, Rotation r) {
switch(r) {
case CCW_90:
switch(orig) {
case NORTH_WEST:
return RailShape.SOUTH_WEST;
case NORTH_SOUTH:
return RailShape.EAST_WEST;
case SOUTH_WEST:
return RailShape.SOUTH_EAST;
case SOUTH_EAST:
return RailShape.NORTH_EAST;
case EAST_WEST:
return RailShape.NORTH_SOUTH;
case NORTH_EAST:
return RailShape.NORTH_WEST;
case ASCENDING_EAST:
return RailShape.ASCENDING_NORTH;
case ASCENDING_WEST:
return RailShape.ASCENDING_SOUTH;
case ASCENDING_NORTH:
return RailShape.ASCENDING_WEST;
case ASCENDING_SOUTH:
return RailShape.ASCENDING_EAST;
}
return switch(orig) {
case NORTH_WEST -> RailShape.SOUTH_WEST;
case NORTH_SOUTH -> RailShape.EAST_WEST;
case SOUTH_WEST -> RailShape.SOUTH_EAST;
case SOUTH_EAST -> RailShape.NORTH_EAST;
case EAST_WEST -> RailShape.NORTH_SOUTH;
case NORTH_EAST -> RailShape.NORTH_WEST;
case ASCENDING_EAST -> RailShape.ASCENDING_NORTH;
case ASCENDING_WEST -> RailShape.ASCENDING_SOUTH;
case ASCENDING_NORTH -> RailShape.ASCENDING_WEST;
case ASCENDING_SOUTH -> RailShape.ASCENDING_EAST;
};
case CW_90:
switch(orig) {
case NORTH_WEST:
return RailShape.NORTH_EAST;
case NORTH_SOUTH:
return RailShape.EAST_WEST;
case SOUTH_WEST:
return RailShape.NORTH_WEST;
case SOUTH_EAST:
return RailShape.SOUTH_WEST;
case EAST_WEST:
return RailShape.NORTH_SOUTH;
case NORTH_EAST:
return RailShape.SOUTH_EAST;
case ASCENDING_EAST:
return RailShape.ASCENDING_SOUTH;
case ASCENDING_WEST:
return RailShape.ASCENDING_NORTH;
case ASCENDING_NORTH:
return RailShape.ASCENDING_EAST;
case ASCENDING_SOUTH:
return RailShape.ASCENDING_WEST;
}
return switch(orig) {
case NORTH_WEST -> RailShape.NORTH_EAST;
case NORTH_SOUTH -> RailShape.EAST_WEST;
case SOUTH_WEST -> RailShape.NORTH_WEST;
case SOUTH_EAST -> RailShape.SOUTH_WEST;
case EAST_WEST -> RailShape.NORTH_SOUTH;
case NORTH_EAST -> RailShape.SOUTH_EAST;
case ASCENDING_EAST -> RailShape.ASCENDING_SOUTH;
case ASCENDING_WEST -> RailShape.ASCENDING_NORTH;
case ASCENDING_NORTH -> RailShape.ASCENDING_EAST;
case ASCENDING_SOUTH -> RailShape.ASCENDING_WEST;
};
case CW_180:
switch(orig) {
case NORTH_WEST:
return RailShape.SOUTH_EAST;
case NORTH_SOUTH:
return RailShape.NORTH_SOUTH;
case SOUTH_WEST:
return RailShape.NORTH_EAST;
case SOUTH_EAST:
return RailShape.NORTH_WEST;
case EAST_WEST:
return RailShape.EAST_WEST;
case NORTH_EAST:
return RailShape.SOUTH_WEST;
case ASCENDING_EAST:
return RailShape.ASCENDING_WEST;
case ASCENDING_WEST:
return RailShape.ASCENDING_EAST;
case ASCENDING_NORTH:
return RailShape.ASCENDING_SOUTH;
case ASCENDING_SOUTH:
return RailShape.ASCENDING_NORTH;
}
return switch(orig) {
case NORTH_WEST -> RailShape.SOUTH_EAST;
case NORTH_SOUTH -> RailShape.NORTH_SOUTH;
case SOUTH_WEST -> RailShape.NORTH_EAST;
case SOUTH_EAST -> RailShape.NORTH_WEST;
case EAST_WEST -> RailShape.EAST_WEST;
case NORTH_EAST -> RailShape.SOUTH_WEST;
case ASCENDING_EAST -> RailShape.ASCENDING_WEST;
case ASCENDING_WEST -> RailShape.ASCENDING_EAST;
case ASCENDING_NORTH -> RailShape.ASCENDING_SOUTH;
case ASCENDING_SOUTH -> RailShape.ASCENDING_NORTH;
};
}
return orig;
}