Skip to content

Commit 5899708

Browse files
committed
Extend Wire parameters API
1 parent 4320d5d commit 5899708

4 files changed

Lines changed: 23 additions & 15 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ yarn_mappings=1.21.1+build.3
77
loader_version=0.16.10
88
fabric_version=0.115.1+1.21.1
99

10-
mod_version=1.0.0-alpha.23
10+
mod_version=1.0.0-alpha.24
1111
maven_group=falseresync.vivatech
1212
archives_base_name=vivatech
1313

src/main/java/falseresync/vivatech/client/rendering/world/WireRenderer.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void afterEntities(WorldRenderContext context) {
5050
if (direction.x == 0 && direction.z == 0) {
5151
drawVerticalWire(model, wireEnd, segmentCount, buffer, positionMatrix, light);
5252
} else {
53-
drawHorizontalWire(parameters, model, direction, wireEnd, segmentCount, wire.length(), buffer, positionMatrix, light);
53+
drawHorizontalWire(parameters, model, direction, wireEnd, segmentCount, buffer, positionMatrix, light);
5454
}
5555

5656
matrices.pop();
@@ -79,19 +79,19 @@ private void drawVerticalWire(WireModel parameters, Vector3f wireEnd, int segmen
7979
}
8080
}
8181

82-
private void drawHorizontalWire(WireParameters renderableWire, WireModel model, Vector3f direction, Vector3f wireEnd, int segmentCount, float length, VertexConsumer buffer, Matrix4f positionMatrix, int light) {
82+
private void drawHorizontalWire(WireParameters renderableWire, WireModel model, Vector3f direction, Vector3f wireEnd, int segmentCount, VertexConsumer buffer, Matrix4f positionMatrix, int light) {
8383
var tangent = new Vector3f(direction.x, 0, direction.z).normalize(new Vector3f()).cross(HORIZONTAL_SEGMENT_NORMAL);
8484
var tangentialHalfSize = tangent.mul(model.getSegmentSize() / 2f, new Vector3f());
8585

8686
var stepXZ = direction.mul(model.getSegmentSize(), new Vector3f());
87-
float stepY = wireEnd.y / segmentCount;
87+
float yPerSegment = wireEnd.y / segmentCount;
8888

8989
var segmentAVertices = buildInitialSegmentVertices(tangentialHalfSize, new Vector3f(0, model.getSegmentSize() / 2, 0), stepXZ);
9090
var segmentBVertices = buildInitialSegmentVertices(tangentialHalfSize, new Vector3f(0, -model.getSegmentSize() / 2, 0), stepXZ);
9191

92-
var startY = renderableWire.getSaggedY(0, stepY);
92+
var startY = renderableWire.getSaggedYForSegment(0, 0);
9393
for (int segmentNo = 0; segmentNo < segmentCount; segmentNo++) {
94-
var endY = renderableWire.getSaggedY(segmentNo + 1, stepY);
94+
var endY = renderableWire.getSaggedYForSegment(yPerSegment * segmentNo, segmentNo + 1);
9595
advanceSegmentVertices(segmentAVertices, stepXZ, startY, endY, model.getSegmentSize() / 2);
9696
advanceSegmentVertices(segmentBVertices, stepXZ, startY, endY, -model.getSegmentSize() / 2);
9797
startY = endY;
@@ -102,14 +102,14 @@ private void drawHorizontalWire(WireParameters renderableWire, WireModel model,
102102
}
103103
}
104104

105-
private void advanceSegmentVertices(Vector3f[] segmentAVertices, Vector3f stepXZ, float startY, float endY, float segmentShift) {
106-
for (var segmentVertex : segmentAVertices) {
105+
private void advanceSegmentVertices(Vector3f[] vertices, Vector3f stepXZ, float startY, float endY, float segmentShift) {
106+
for (var segmentVertex : vertices) {
107107
segmentVertex.add(stepXZ);
108108
}
109-
segmentAVertices[0].y = startY + segmentShift;
110-
segmentAVertices[1].y = startY - segmentShift;
111-
segmentAVertices[2].y = endY - segmentShift;
112-
segmentAVertices[3].y = endY + segmentShift;
109+
vertices[0].y = startY + segmentShift;
110+
vertices[1].y = startY - segmentShift;
111+
vertices[2].y = endY - segmentShift;
112+
vertices[3].y = endY + segmentShift;
113113
}
114114

115115
private Vector3f[] buildInitialSegmentVertices(Vector3f tangentialHalfSize, Vector3f segmentShift, Vector3f step) {

src/main/java/falseresync/vivatech/client/wire/SimpleWireParameters.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
public abstract class SimpleWireParameters implements WireParameters {
66
private final Wire wire;
77
private final WireModel parameters;
8+
private final float k1;
9+
private final float k2;
810

911
public SimpleWireParameters(Wire wire, WireModel parameters) {
1012
this.wire = wire;
1113
this.parameters = parameters;
14+
k1 = (float) (getSaggingCoefficient() * 4f * Math.pow(parameters.getSegmentSize() / wire.length(), 2));
15+
k2 = getSaggingCoefficient() * 4f * parameters.getSegmentSize() / wire.length();
1216
}
1317

1418
@Override
@@ -17,8 +21,8 @@ public WireModel getModel() {
1721
}
1822

1923
@Override
20-
public float getSaggedY(int segmentNo, float yStep) {
21-
return (float) (yStep * segmentNo + getSaggingCoefficient() * (Math.pow(2 * (parameters.getSegmentSize() * segmentNo) - wire.length(), 2) / Math.pow(wire.length(), 2) - 1));
24+
public float getSaggedYForSegment(float unsaggedY, float segmentNo) {
25+
return unsaggedY + k1 * segmentNo * segmentNo - k2 * segmentNo;
2226
}
2327

2428
public abstract float getSaggingCoefficient();

src/main/java/falseresync/vivatech/client/wire/WireParameters.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
public interface WireParameters {
66
WireModel getModel();
77

8-
float getSaggedY(int segmentNo, float yStep);
8+
float getSaggedYForSegment(float unsaggedY, float segmentNo);
9+
10+
default float getSaggedYForX(float unsaggedY, float x) {
11+
return getSaggedYForSegment(unsaggedY, x / getModel().getSegmentSize());
12+
}
913

1014
@FunctionalInterface
1115
interface Factory {

0 commit comments

Comments
 (0)