Skip to content

Commit d2e45e2

Browse files
committed
smooth water levels
1 parent d05f8e7 commit d2e45e2

File tree

1 file changed

+63
-6
lines changed

1 file changed

+63
-6
lines changed

src/client/scripts/World/ChunkMesher.js

Lines changed: 63 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,76 @@ const CustomRender = {
5050
)
5151
continue;
5252
const faceVertex = this.genBlockFace(side, block, pos);
53+
let waterLevels = [];
54+
for (let x = -1; x <= 1; x++)
55+
for (let z = -1; z <= 1; z++) {
56+
let block = this.chunkTerrain.getBlock(
57+
pos[0] + x,
58+
pos[1],
59+
pos[2] + z
60+
);
61+
if (block.name === "water")
62+
if (block.stateId - 32 === 10) waterLevels.push(0);
63+
else waterLevels.push((block.stateId - 33) / 10);
64+
else if (block.boundingBox === "block")
65+
waterLevels.push(10);
66+
else waterLevels.push(1);
67+
}
68+
let waterLevelAverages = [
69+
Math.min(
70+
waterLevels[0],
71+
waterLevels[1],
72+
waterLevels[3],
73+
waterLevels[4]
74+
),
75+
Math.min(
76+
waterLevels[1],
77+
waterLevels[2],
78+
waterLevels[4],
79+
waterLevels[5]
80+
),
81+
Math.min(
82+
waterLevels[4],
83+
waterLevels[5],
84+
waterLevels[7],
85+
waterLevels[8]
86+
),
87+
Math.min(
88+
waterLevels[3],
89+
waterLevels[4],
90+
waterLevels[6],
91+
waterLevels[7]
92+
),
93+
];
94+
5395
switch (side) {
5496
case "py":
55-
for (let i = 0; i < 6; i++) {
56-
faceVertex.pos[3 * i + 1] -= (level - 1) / 9;
57-
}
97+
faceVertex.pos[3 * 0 + 1] -= waterLevelAverages[3];
98+
faceVertex.pos[3 * 1 + 1] -= waterLevelAverages[0];
99+
faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[2];
100+
faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[2];
101+
faceVertex.pos[3 * 4 + 1] -= waterLevelAverages[0];
102+
faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[1];
58103
break;
59104
case "nx":
105+
faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[2];
106+
faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[2];
107+
faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[3];
108+
break;
60109
case "px":
110+
faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[0];
111+
faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[0];
112+
faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[1];
113+
break;
61114
case "nz":
115+
faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[3];
116+
faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[3];
117+
faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[0];
118+
break;
62119
case "pz":
63-
faceVertex.pos[3 * 2 + 1] -= (level - 1) / 9;
64-
faceVertex.pos[3 * 3 + 1] -= (level - 1) / 9;
65-
faceVertex.pos[3 * 5 + 1] -= (level - 1) / 9;
120+
faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[1];
121+
faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[1];
122+
faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[2];
66123

67124
break;
68125
}

0 commit comments

Comments
 (0)