|
1 | | -const CustomRender = { |
2 | | - water: function (tVertexBuffer, VertexBuffer, pos) { |
3 | | - const block = this.chunkTerrain.getBlock(pos[0], pos[1], pos[2]) |
4 | | - const state = block.stateId |
5 | | - |
6 | | - // const falling = !!(state & 8); |
7 | | - const level = state - 32 |
8 | | - if (level === 10) { |
9 | | - for (const l in this.neighbours) { |
10 | | - const offset = this.neighbours[l] |
11 | | - if ( |
12 | | - this.chunkTerrain.getBlock( |
13 | | - pos[0] + offset[0], |
14 | | - pos[1] + offset[1], |
15 | | - pos[2] + offset[2] |
16 | | - ).name !== 'water' |
17 | | - ) { this.addFace(tVertexBuffer, VertexBuffer, l, pos) } |
18 | | - } |
19 | | - } else { |
20 | | - for (const side in this.neighbours) { |
21 | | - const offset = this.neighbours[side] |
22 | | - if ( |
23 | | - this.chunkTerrain.getBlock( |
24 | | - pos[0] + offset[0], |
25 | | - pos[1] + offset[1], |
26 | | - pos[2] + offset[2] |
27 | | - ).name === 'water' |
28 | | - ) { continue } |
29 | | - const faceVertex = this.genBlockFace(side, block, pos) |
30 | | - const waterLevels = [] |
31 | | - for (let x = -1; x <= 1; x++) { |
32 | | - for (let z = -1; z <= 1; z++) { |
33 | | - const block = this.chunkTerrain.getBlock( |
34 | | - pos[0] + x, |
35 | | - pos[1], |
36 | | - pos[2] + z |
37 | | - ) |
38 | | - if (block.name === 'water') { |
39 | | - if (block.stateId - 32 === 10) waterLevels.push(0) |
40 | | - else waterLevels.push((block.stateId - 33) / 10) |
41 | | - } else if (block.boundingBox === 'block') { waterLevels.push(10) } else waterLevels.push(1) |
42 | | - } |
43 | | - } |
44 | | - const waterLevelAverages = [ |
45 | | - Math.min( |
46 | | - waterLevels[0], |
47 | | - waterLevels[1], |
48 | | - waterLevels[3], |
49 | | - waterLevels[4] |
50 | | - ), |
51 | | - Math.min( |
52 | | - waterLevels[1], |
53 | | - waterLevels[2], |
54 | | - waterLevels[4], |
55 | | - waterLevels[5] |
56 | | - ), |
57 | | - Math.min( |
58 | | - waterLevels[4], |
59 | | - waterLevels[5], |
60 | | - waterLevels[7], |
61 | | - waterLevels[8] |
62 | | - ), |
63 | | - Math.min( |
64 | | - waterLevels[3], |
65 | | - waterLevels[4], |
66 | | - waterLevels[6], |
67 | | - waterLevels[7] |
68 | | - ) |
69 | | - ] |
70 | | - |
71 | | - switch (side) { |
72 | | - case 'py': |
73 | | - faceVertex.pos[3 * 0 + 1] -= waterLevelAverages[3] |
74 | | - faceVertex.pos[3 * 1 + 1] -= waterLevelAverages[0] |
75 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[2] |
76 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[2] |
77 | | - faceVertex.pos[3 * 4 + 1] -= waterLevelAverages[0] |
78 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[1] |
79 | | - break |
80 | | - case 'nx': |
81 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[2] |
82 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[2] |
83 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[3] |
84 | | - break |
85 | | - case 'px': |
86 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[0] |
87 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[0] |
88 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[1] |
89 | | - break |
90 | | - case 'nz': |
91 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[3] |
92 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[3] |
93 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[0] |
94 | | - break |
95 | | - case 'pz': |
96 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[1] |
97 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[1] |
98 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[2] |
99 | | - |
100 | | - break |
101 | | - } |
102 | | - this.ambientOcclusion(block, pos, faceVertex, side) |
103 | | - this.push( |
104 | | - tVertexBuffer, |
105 | | - VertexBuffer, |
106 | | - faceVertex, |
107 | | - this.chunkTerrain.getBlock(...pos).transparent |
108 | | - ) |
109 | | - } |
110 | | - } |
111 | | - }, |
112 | | - grass: function (tVertexBuffer, VertexBuffer, pos) { |
113 | | - const uv = this.getUV('grass') |
114 | | - // prettier-ignore |
115 | | - const faceVertex = { |
116 | | - pos: [ |
117 | | - -0.4 + pos[0], -0.5 + pos[1], 0.4 + pos[2], |
118 | | - 0.4 + pos[0], -0.5 + pos[1], -0.4 + pos[2], |
119 | | - -0.4 + pos[0], 0.4 + pos[1], 0.4 + pos[2], |
120 | | - -0.4 + pos[0], 0.4 + pos[1], 0.4 + pos[2], |
121 | | - 0.4 + pos[0], -0.5 + pos[1], -0.4 + pos[2], |
122 | | - 0.4 + pos[0], 0.4 + pos[1], -0.4 + pos[2], |
123 | | - |
124 | | - -0.4 + pos[0], -0.5 + pos[1], -0.4 + pos[2], |
125 | | - 0.4 + pos[0], -0.5 + pos[1], 0.4 + pos[2], |
126 | | - -0.4 + pos[0], 0.4 + pos[1], -0.4 + pos[2], |
127 | | - -0.4 + pos[0], 0.4 + pos[1], -0.4 + pos[2], |
128 | | - 0.4 + pos[0], -0.5 + pos[1], 0.4 + pos[2], |
129 | | - 0.4 + pos[0], 0.4 + pos[1], 0.4 + pos[2], |
130 | | - |
131 | | - 0.4 + pos[0], -0.5 + pos[1], -0.4 + pos[2], |
132 | | - -0.4 + pos[0], -0.5 + pos[1], 0.4 + pos[2], |
133 | | - -0.4 + pos[0], 0.4 + pos[1], 0.4 + pos[2], |
134 | | - |
135 | | - 0.4 + pos[0], -0.5 + pos[1], -0.4 + pos[2], |
136 | | - -0.4 + pos[0], 0.4 + pos[1], 0.4 + pos[2], |
137 | | - 0.4 + pos[0], 0.4 + pos[1], -0.4 + pos[2], |
138 | | - |
139 | | - 0.4 + pos[0], -0.5 + pos[1], 0.4 + pos[2], |
140 | | - -0.4 + pos[0], -0.5 + pos[1], -0.4 + pos[2], |
141 | | - -0.4 + pos[0], 0.4 + pos[1], -0.4 + pos[2], |
142 | | - |
143 | | - 0.4 + pos[0], -0.5 + pos[1], 0.4 + pos[2], |
144 | | - -0.4 + pos[0], 0.4 + pos[1], -0.4 + pos[2], |
145 | | - 0.4 + pos[0], 0.4 + pos[1], 0.4 + pos[2] |
146 | | - ], |
147 | | - norm: [ |
148 | | - 0, 0, 1, |
149 | | - 0, 0, 1, |
150 | | - 0, 0, 1, |
151 | | - 0, 0, 1, |
152 | | - 0, 0, 1, |
153 | | - 0, 0, 1, |
154 | | - 0, 0, 1, |
155 | | - 0, 0, 1, |
156 | | - 0, 0, 1, |
157 | | - 0, 0, 1, |
158 | | - 0, 0, 1, |
159 | | - 0, 0, 1, |
160 | | - |
161 | | - 0, 0, 1, |
162 | | - 0, 0, 1, |
163 | | - 0, 0, 1, |
164 | | - 0, 0, 1, |
165 | | - 0, 0, 1, |
166 | | - 0, 0, 1, |
167 | | - 0, 0, 1, |
168 | | - 0, 0, 1, |
169 | | - 0, 0, 1, |
170 | | - 0, 0, 1, |
171 | | - 0, 0, 1, |
172 | | - 0, 0, 1 |
173 | | - ], |
174 | | - uv: [ |
175 | | - ...uv[0], |
176 | | - ...uv[2], |
177 | | - ...uv[1], |
178 | | - |
179 | | - ...uv[1], |
180 | | - ...uv[2], |
181 | | - ...uv[3], |
182 | | - |
183 | | - ...uv[0], |
184 | | - ...uv[2], |
185 | | - ...uv[1], |
186 | | - |
187 | | - ...uv[1], |
188 | | - ...uv[2], |
189 | | - ...uv[3], |
190 | | - |
191 | | - ...uv[2], |
192 | | - ...uv[0], |
193 | | - ...uv[1], |
194 | | - |
195 | | - ...uv[2], |
196 | | - ...uv[1], |
197 | | - ...uv[3], |
198 | | - |
199 | | - ...uv[2], |
200 | | - ...uv[0], |
201 | | - ...uv[1], |
202 | | - |
203 | | - ...uv[2], |
204 | | - ...uv[1], |
205 | | - ...uv[3] |
206 | | - ], |
207 | | - color: [ |
208 | | - 0.1, 1, 0.1, |
209 | | - 0.1, 1, 0.1, |
210 | | - 0.1, 1, 0.1, |
211 | | - 0.1, 1, 0.1, |
212 | | - 0.1, 1, 0.1, |
213 | | - 0.1, 1, 0.1, |
214 | | - 0.1, 1, 0.1, |
215 | | - 0.1, 1, 0.1, |
216 | | - 0.1, 1, 0.1, |
217 | | - 0.1, 1, 0.1, |
218 | | - 0.1, 1, 0.1, |
219 | | - 0.1, 1, 0.1, |
220 | | - 0.1, 1, 0.1, |
221 | | - 0.1, 1, 0.1, |
222 | | - 0.1, 1, 0.1, |
223 | | - 0.1, 1, 0.1, |
224 | | - 0.1, 1, 0.1, |
225 | | - 0.1, 1, 0.1, |
226 | | - 0.1, 1, 0.1, |
227 | | - 0.1, 1, 0.1, |
228 | | - 0.1, 1, 0.1, |
229 | | - 0.1, 1, 0.1, |
230 | | - 0.1, 1, 0.1, |
231 | | - 0.1, 1, 0.1 |
232 | | - ] |
233 | | - } |
234 | | - |
235 | | - this.push(tVertexBuffer, VertexBuffer, faceVertex, true) |
236 | | - }, |
237 | | - lava: function (tVertexBuffer, VertexBuffer, pos) { |
238 | | - const block = this.chunkTerrain.getBlock(pos[0], pos[1], pos[2]) |
239 | | - const state = block.stateId |
240 | | - |
241 | | - // const falling = !!(state & 8); |
242 | | - const level = (state & 0b001110) - 1 |
243 | | - if (level === 9) { |
244 | | - for (const l in this.neighbours) { |
245 | | - const offset = this.neighbours[l] |
246 | | - if ( |
247 | | - this.chunkTerrain.getBlock( |
248 | | - pos[0] + offset[0], |
249 | | - pos[1] + offset[1], |
250 | | - pos[2] + offset[2] |
251 | | - ).name !== 'lava' |
252 | | - ) { this.addFace(tVertexBuffer, VertexBuffer, l, pos) } |
253 | | - } |
254 | | - } else { |
255 | | - for (const side in this.neighbours) { |
256 | | - const offset = this.neighbours[side] |
257 | | - if ( |
258 | | - this.chunkTerrain.getBlock( |
259 | | - pos[0] + offset[0], |
260 | | - pos[1] + offset[1], |
261 | | - pos[2] + offset[2] |
262 | | - ).name === 'lava' |
263 | | - ) { continue } |
264 | | - const faceVertex = this.genBlockFace(side, block, pos) |
265 | | - const waterLevels = [] |
266 | | - for (let x = -1; x <= 1; x++) { |
267 | | - for (let z = -1; z <= 1; z++) { |
268 | | - const block = this.chunkTerrain.getBlock( |
269 | | - pos[0] + x, |
270 | | - pos[1], |
271 | | - pos[2] + z |
272 | | - ) |
273 | | - if (block.name === 'lava') { |
274 | | - if ((block.stateId & 0b001110) - 1 === 10) { waterLevels.push(0) } else { |
275 | | - waterLevels.push( |
276 | | - ((block.stateId & 0b001110) - 1) / 10 |
277 | | - ) |
278 | | - } |
279 | | - } else if (block.boundingBox === 'block') { waterLevels.push(10) } else waterLevels.push(1) |
280 | | - } |
281 | | - } |
282 | | - const waterLevelAverages = [ |
283 | | - Math.min( |
284 | | - waterLevels[0], |
285 | | - waterLevels[1], |
286 | | - waterLevels[3], |
287 | | - waterLevels[4] |
288 | | - ), |
289 | | - Math.min( |
290 | | - waterLevels[1], |
291 | | - waterLevels[2], |
292 | | - waterLevels[4], |
293 | | - waterLevels[5] |
294 | | - ), |
295 | | - Math.min( |
296 | | - waterLevels[4], |
297 | | - waterLevels[5], |
298 | | - waterLevels[7], |
299 | | - waterLevels[8] |
300 | | - ), |
301 | | - Math.min( |
302 | | - waterLevels[3], |
303 | | - waterLevels[4], |
304 | | - waterLevels[6], |
305 | | - waterLevels[7] |
306 | | - ) |
307 | | - ] |
308 | | - |
309 | | - switch (side) { |
310 | | - case 'py': |
311 | | - faceVertex.pos[3 * 0 + 1] -= waterLevelAverages[3] |
312 | | - faceVertex.pos[3 * 1 + 1] -= waterLevelAverages[0] |
313 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[2] |
314 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[2] |
315 | | - faceVertex.pos[3 * 4 + 1] -= waterLevelAverages[0] |
316 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[1] |
317 | | - break |
318 | | - case 'nx': |
319 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[2] |
320 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[2] |
321 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[3] |
322 | | - break |
323 | | - case 'px': |
324 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[0] |
325 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[0] |
326 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[1] |
327 | | - break |
328 | | - case 'nz': |
329 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[3] |
330 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[3] |
331 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[0] |
332 | | - break |
333 | | - case 'pz': |
334 | | - faceVertex.pos[3 * 2 + 1] -= waterLevelAverages[1] |
335 | | - faceVertex.pos[3 * 3 + 1] -= waterLevelAverages[1] |
336 | | - faceVertex.pos[3 * 5 + 1] -= waterLevelAverages[2] |
337 | | - |
338 | | - break |
339 | | - } |
340 | | - this.ambientOcclusion(block, pos, faceVertex, side) |
341 | | - this.push( |
342 | | - tVertexBuffer, |
343 | | - VertexBuffer, |
344 | | - faceVertex, |
345 | | - this.chunkTerrain.getBlock(...pos).transparent |
346 | | - ) |
347 | | - } |
348 | | - } |
349 | | - } |
350 | | -} |
| 1 | +import { CustomRender } from './CustomRender.js' |
351 | 2 |
|
352 | 3 | class ChunkMesher { |
353 | 4 | constructor (options) { |
@@ -636,13 +287,13 @@ class ChunkMesher { |
636 | 287 | for (let y = -1; y <= 1; y++) { |
637 | 288 | for (let z = -1; z <= 1; z++) { |
638 | 289 | loaded[`${x}:${y}:${z}`] = |
639 | | - this.chunkTerrain.getBlock( |
640 | | - pos[0] + x, |
641 | | - pos[1] + y, |
642 | | - pos[2] + z |
643 | | - ).boundingBox === 'block' |
644 | | - ? 1 |
645 | | - : 0 |
| 290 | + this.chunkTerrain.getBlock( |
| 291 | + pos[0] + x, |
| 292 | + pos[1] + y, |
| 293 | + pos[2] + z |
| 294 | + ).boundingBox === 'block' |
| 295 | + ? 1 |
| 296 | + : 0 |
646 | 297 | } |
647 | 298 | } |
648 | 299 | } |
|
0 commit comments