Skip to content

Commit 5d9aef3

Browse files
committed
Move MC track vector code into static init
1 parent 5a5a6ec commit 5d9aef3

1 file changed

Lines changed: 37 additions & 60 deletions

File tree

src/main/java/trackapi/compat/MinecraftRail.java

Lines changed: 37 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,42 @@
99
import trackapi.lib.Gauges;
1010
import trackapi.lib.ITrack;
1111

12+
import java.util.HashMap;
13+
import java.util.Map;
14+
1215
public class MinecraftRail implements ITrack {
16+
private static Map<EnumRailDirection, Vec3d> vectors = new HashMap<>();
17+
private static Map<EnumRailDirection, Vec3d> centers = new HashMap<>();
18+
static {
19+
Vec3d north = new Vec3d(0, 0, 1);
20+
Vec3d south = new Vec3d(0, 0, -1);
21+
Vec3d east = new Vec3d(1, 0, 0);
22+
Vec3d west = new Vec3d(-1, 0, 0);
23+
Vec3d ascending = new Vec3d(0, 1, 0);
24+
25+
vectors.put(EnumRailDirection.ASCENDING_EAST, east.add(ascending).normalize());
26+
vectors.put(EnumRailDirection.ASCENDING_NORTH, north.add(ascending).normalize());
27+
vectors.put(EnumRailDirection.ASCENDING_SOUTH, south.add(ascending).normalize());
28+
vectors.put(EnumRailDirection.ASCENDING_WEST, west.add(ascending).normalize());
29+
vectors.put(EnumRailDirection.EAST_WEST, east.normalize());
30+
vectors.put(EnumRailDirection.NORTH_EAST, north.add(east).normalize());
31+
vectors.put(EnumRailDirection.NORTH_SOUTH, north.normalize());
32+
vectors.put(EnumRailDirection.NORTH_WEST, north.add(west).normalize());
33+
vectors.put(EnumRailDirection.SOUTH_EAST, south.add(east).normalize());
34+
vectors.put(EnumRailDirection.SOUTH_WEST, south.add(west).normalize());
35+
36+
centers.put(EnumRailDirection.ASCENDING_EAST, new Vec3d(0.5, 0.5, 0.5));
37+
centers.put(EnumRailDirection.ASCENDING_NORTH, new Vec3d(0.5, 0.5, 0.5));
38+
centers.put(EnumRailDirection.ASCENDING_SOUTH, new Vec3d(0.5, 0.5, 0.5));
39+
centers.put(EnumRailDirection.ASCENDING_WEST, new Vec3d(0.5, 0.5, 0.5));
40+
centers.put(EnumRailDirection.EAST_WEST, new Vec3d(0.5, 0.1, 0.5));
41+
centers.put(EnumRailDirection.NORTH_EAST, new Vec3d(0.75, 0.1, 0.25));
42+
centers.put(EnumRailDirection.NORTH_SOUTH, new Vec3d(0.5, 0.1, 0.5));
43+
centers.put(EnumRailDirection.NORTH_WEST, new Vec3d(0.25, 0.1, 0.25));
44+
centers.put(EnumRailDirection.SOUTH_EAST, new Vec3d(0.75, 0.1, 0.75));
45+
centers.put(EnumRailDirection.SOUTH_WEST, new Vec3d(0.25, 0.1, 0.75));
46+
}
47+
1348

1449
private EnumRailDirection direction;
1550
private BlockPos pos;
@@ -26,68 +61,10 @@ public double getTrackGauge() {
2661
return Gauges.MINECRAFT;
2762
}
2863

29-
public Vec3d getTrackVector() {
30-
Vec3d north = new Vec3d(0, 0, 1);
31-
Vec3d south = new Vec3d(0, 0, -1);
32-
Vec3d east = new Vec3d(1, 0, 0);
33-
Vec3d west = new Vec3d(-1, 0, 0);
34-
Vec3d ascending = new Vec3d(0, 1, 0);
35-
36-
37-
switch (direction) {
38-
case ASCENDING_EAST:
39-
return east.add(ascending).normalize();
40-
case ASCENDING_NORTH:
41-
return north.add(ascending).normalize();
42-
case ASCENDING_SOUTH:
43-
return south.add(ascending).normalize();
44-
case ASCENDING_WEST:
45-
return west.add(ascending).normalize();
46-
case EAST_WEST:
47-
return east.normalize();
48-
case NORTH_EAST:
49-
return north.add(east).normalize();
50-
case NORTH_SOUTH:
51-
return north.normalize();
52-
case NORTH_WEST:
53-
return north.add(west).normalize();
54-
case SOUTH_EAST:
55-
return south.add(east).normalize();
56-
case SOUTH_WEST:
57-
return south.add(west).normalize();
58-
default:
59-
return null;
60-
}
61-
}
62-
63-
public Vec3d getTrackCenter() {
64-
switch (direction) {
65-
case ASCENDING_EAST:
66-
case ASCENDING_NORTH:
67-
case ASCENDING_SOUTH:
68-
case ASCENDING_WEST:
69-
return new Vec3d(0.5, 0.5, 0.5);
70-
case EAST_WEST:
71-
return new Vec3d(0.5, 0.1, 0.5);
72-
case NORTH_EAST:
73-
return new Vec3d(0.75, 0.1, 0.25);
74-
case NORTH_SOUTH:
75-
return new Vec3d(0.5, 0.1, 0.5);
76-
case NORTH_WEST:
77-
return new Vec3d(0.25, 0.1, 0.25);
78-
case SOUTH_EAST:
79-
return new Vec3d(0.75, 0.1, 0.75);
80-
case SOUTH_WEST:
81-
return new Vec3d(0.25, 0.1, 0.75);
82-
default:
83-
return null;
84-
}
85-
}
86-
8764
@Override
8865
public Vec3d getNextPosition(Vec3d currentPosition, Vec3d motion) {
89-
Vec3d trackMovement = getTrackVector();
90-
Vec3d trackCenter = getTrackCenter();
66+
Vec3d trackMovement = vectors.get(direction);
67+
Vec3d trackCenter = centers.get(direction);
9168

9269
Vec3d posRelativeToCenter = currentPosition.subtractReverse(new Vec3d(pos).add(trackCenter));
9370
double distanceToCenter = posRelativeToCenter.lengthVector();

0 commit comments

Comments
 (0)