Skip to content

Commit 4e4e339

Browse files
committed
clean up chunkMesher
1 parent 20e21c4 commit 4e4e339

File tree

1 file changed

+85
-229
lines changed

1 file changed

+85
-229
lines changed

src/scripts/world/ChunkMesher.js

Lines changed: 85 additions & 229 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class ChunkMesher {
4545
let xd, toxX, toxY
4646
if (
4747
this.blocksTex[block.name] !== undefined ||
48-
this.blocksTex[String(block.stateId)] !== undefined
48+
this.blocksTex[String(block.stateId)] !== undefined
4949
) {
5050
if (this.blocksTex[String(block.stateId)] !== undefined) {
5151
xd = this.blocksTex[String(block.stateId)]
@@ -56,10 +56,7 @@ class ChunkMesher {
5656
toxX = this.blocksMapping[xd.all].x
5757
toxY = this.blocksMapping[xd.all].y
5858
} else if (xd.side !== undefined) {
59-
const mapka = {
60-
py: 'top',
61-
ny: 'bottom'
62-
}
59+
const mapka = { py: 'top', ny: 'bottom' }
6360
if (mapka[type] !== undefined) {
6461
toxX = this.blocksMapping[xd[mapka[type]]].x
6562
toxY = this.blocksMapping[xd[mapka[type]]].y
@@ -92,107 +89,40 @@ class ChunkMesher {
9289
const y1 = 1 - q * toxY - q + b
9390
const x2 = x1 + q - 2 * b
9491
const y2 = y1 + q - 2 * b
95-
return [
96-
[x1, y1],
97-
[x1, y2],
98-
[x2, y1],
99-
[x2, y2]
100-
]
92+
return [x1, y1, x2, y1, x1, y2, x1, y2, x2, y1, x2, y2]
10193
}
10294

10395
genBlockFace (type, block, pos) {
104-
let uv = this.getUvForFace(block, type)
105-
uv = [
106-
...uv[0],
107-
...uv[2],
108-
...uv[1],
109-
...uv[1],
110-
...uv[2],
111-
...uv[3]
112-
]
96+
const uv = this.getUvForFace(block, type)
11397
const norm = []
11498
for (let i = 0; i < 6; i++) {
11599
norm.push(...this.neighbours[type])
116100
}
117-
switch (type) {
118-
case 'pz':
119-
return {
120-
pos: [
121-
-0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
122-
0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
123-
-0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2],
124-
-0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2],
125-
0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
126-
0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2]
127-
],
128-
norm,
129-
uv
130-
}
131-
case 'nx':
132-
return {
133-
pos: [
134-
0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
135-
0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
136-
0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2],
137-
0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2],
138-
0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
139-
0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2]
140-
],
141-
norm,
142-
uv
143-
}
144-
case 'nz':
145-
return {
146-
pos: [
147-
0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
148-
-0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
149-
0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2],
150-
0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2],
151-
-0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
152-
-0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2]
153-
],
154-
norm,
155-
uv
156-
}
157-
case 'px':
158-
return {
159-
pos: [
160-
-0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
161-
-0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
162-
-0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2],
163-
-0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2],
164-
-0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
165-
-0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2]
166-
],
167-
norm,
168-
uv
169-
}
170-
case 'py':
171-
return {
172-
pos: [
173-
0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2],
174-
-0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2],
175-
0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2],
176-
0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2],
177-
-0.5 + pos[0], 0.5 + pos[1], -0.5 + pos[2],
178-
-0.5 + pos[0], 0.5 + pos[1], 0.5 + pos[2]
179-
],
180-
norm,
181-
uv
182-
}
183-
case 'ny':
184-
return {
185-
pos: [
186-
0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
187-
-0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
188-
0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
189-
0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2],
190-
-0.5 + pos[0], -0.5 + pos[1], 0.5 + pos[2],
191-
-0.5 + pos[0], -0.5 + pos[1], -0.5 + pos[2]
192-
],
193-
norm,
194-
uv
195-
}
101+
const ps = (num) => {
102+
const pt = [
103+
[-0.5, -0.5, 0.5],
104+
[0.5, -0.5, 0.5],
105+
[-0.5, 0.5, 0.5],
106+
[0.5, 0.5, 0.5],
107+
[0.5, -0.5, -0.5],
108+
[0.5, 0.5, -0.5],
109+
[-0.5, -0.5, -0.5],
110+
[-0.5, 0.5, -0.5]
111+
]
112+
return [pt[num][0] + pos[0], pt[num][1] + pos[1], pt[num][2] + pos[2]]
113+
}
114+
const px = ({
115+
pz: [0, 1, 2, 3],
116+
nx: [1, 4, 3, 5],
117+
nz: [4, 6, 5, 7],
118+
px: [6, 0, 7, 2],
119+
py: [5, 7, 3, 2],
120+
ny: [1, 0, 4, 6]
121+
})[type]
122+
return {
123+
pos: [...ps(px[0]), ...ps(px[1]), ...ps(px[2]), ...ps(px[2]), ...ps(px[1]), ...ps(px[3])],
124+
norm,
125+
uv
196126
}
197127
}
198128

@@ -224,131 +154,64 @@ class ChunkMesher {
224154
}
225155
}
226156
}
227-
let col1 = this.aoColor(0)
228-
let col2 = this.aoColor(0)
229-
let col3 = this.aoColor(0)
230-
let col4 = this.aoColor(0)
231-
if (type === 'py') {
232-
col1 = this.aoColor(
233-
loaded['1:1:-1'] + loaded['0:1:-1'] + loaded['1:1:0']
234-
)
235-
col2 = this.aoColor(
236-
loaded['1:1:1'] + loaded['0:1:1'] + loaded['1:1:0']
237-
)
238-
col3 = this.aoColor(
239-
loaded['-1:1:-1'] + loaded['0:1:-1'] + loaded['-1:1:0']
240-
)
241-
col4 = this.aoColor(
242-
loaded['-1:1:1'] + loaded['0:1:1'] + loaded['-1:1:0']
243-
)
244-
}
245-
if (type === 'ny') {
246-
col2 = this.aoColor(
247-
loaded['1:-1:-1'] + loaded['0:-1:-1'] + loaded['1:-1:0']
248-
)
249-
col1 = this.aoColor(
250-
loaded['1:-1:1'] + loaded['0:-1:1'] + loaded['1:-1:0']
251-
)
252-
col4 = this.aoColor(
253-
loaded['-1:-1:-1'] + loaded['0:-1:-1'] + loaded['-1:-1:0']
254-
)
255-
col3 = this.aoColor(
256-
loaded['-1:-1:1'] + loaded['0:-1:1'] + loaded['-1:-1:0']
257-
)
258-
}
259-
if (type === 'px') {
260-
col1 = this.aoColor(
261-
loaded['-1:-1:0'] + loaded['-1:-1:-1'] + loaded['-1:0:-1']
262-
)
263-
col2 = this.aoColor(
264-
loaded['-1:1:0'] + loaded['-1:1:-1'] + loaded['-1:0:-1']
265-
)
266-
col3 = this.aoColor(
267-
loaded['-1:-1:0'] + loaded['-1:-1:1'] + loaded['-1:0:1']
268-
)
269-
col4 = this.aoColor(
270-
loaded['-1:1:0'] + loaded['-1:1:1'] + loaded['-1:0:1']
271-
)
272-
}
273-
if (type === 'nx') {
274-
col3 = this.aoColor(
275-
loaded['1:-1:0'] + loaded['1:-1:-1'] + loaded['1:0:-1']
276-
)
277-
col4 = this.aoColor(
278-
loaded['1:1:0'] + loaded['1:1:-1'] + loaded['1:0:-1']
279-
)
280-
col1 = this.aoColor(
281-
loaded['1:-1:0'] + loaded['1:-1:1'] + loaded['1:0:1']
282-
)
283-
col2 = this.aoColor(
284-
loaded['1:1:0'] + loaded['1:1:1'] + loaded['1:0:1']
285-
)
286-
}
287-
if (type === 'pz') {
288-
col1 = this.aoColor(
289-
loaded['0:-1:1'] + loaded['-1:-1:1'] + loaded['-1:0:1']
290-
)
291-
col2 = this.aoColor(
292-
loaded['0:1:1'] + loaded['-1:1:1'] + loaded['-1:0:1']
293-
)
294-
col3 = this.aoColor(
295-
loaded['0:-1:1'] + loaded['1:-1:1'] + loaded['1:0:1']
296-
)
297-
col4 = this.aoColor(
298-
loaded['0:1:1'] + loaded['1:1:1'] + loaded['1:0:1']
299-
)
300-
}
301-
if (type === 'nz') {
302-
col3 = this.aoColor(
303-
loaded['0:-1:-1'] + loaded['-1:-1:-1'] + loaded['-1:0:-1']
304-
)
305-
col4 = this.aoColor(
306-
loaded['0:1:-1'] + loaded['-1:1:-1'] + loaded['-1:0:-1']
307-
)
308-
col1 = this.aoColor(
309-
loaded['0:-1:-1'] + loaded['1:-1:-1'] + loaded['1:0:-1']
310-
)
311-
col2 = this.aoColor(
312-
loaded['0:1:-1'] + loaded['1:1:-1'] + loaded['1:0:-1']
313-
)
314-
}
157+
const col = ({
158+
py: [
159+
this.aoColor(loaded['1:1:-1'] + loaded['0:1:-1'] + loaded['1:1:0']),
160+
this.aoColor(loaded['1:1:1'] + loaded['0:1:1'] + loaded['1:1:0']),
161+
this.aoColor(loaded['-1:1:-1'] + loaded['0:1:-1'] + loaded['-1:1:0']),
162+
this.aoColor(loaded['-1:1:1'] + loaded['0:1:1'] + loaded['-1:1:0'])
163+
],
164+
ny: [
165+
this.aoColor(loaded['1:-1:-1'] + loaded['0:-1:-1'] + loaded['1:-1:0']),
166+
this.aoColor(loaded['1:-1:1'] + loaded['0:-1:1'] + loaded['1:-1:0']),
167+
this.aoColor(loaded['-1:-1:1'] + loaded['0:-1:1'] + loaded['-1:-1:0']),
168+
this.aoColor(loaded['-1:-1:-1'] + loaded['0:-1:-1'] + loaded['-1:-1:0'])
169+
],
170+
px: [
171+
this.aoColor(loaded['-1:-1:0'] + loaded['-1:-1:-1'] + loaded['-1:0:-1']),
172+
this.aoColor(loaded['-1:1:0'] + loaded['-1:1:-1'] + loaded['-1:0:-1']),
173+
this.aoColor(loaded['-1:-1:0'] + loaded['-1:-1:1'] + loaded['-1:0:1']),
174+
this.aoColor(loaded['-1:1:0'] + loaded['-1:1:1'] + loaded['-1:0:1'])
175+
],
176+
nx: [
177+
this.aoColor(loaded['1:-1:0'] + loaded['1:-1:1'] + loaded['1:0:1']),
178+
this.aoColor(loaded['1:1:0'] + loaded['1:1:1'] + loaded['1:0:1']),
179+
this.aoColor(loaded['1:-1:0'] + loaded['1:-1:-1'] + loaded['1:0:-1']),
180+
this.aoColor(loaded['1:1:0'] + loaded['1:1:-1'] + loaded['1:0:-1'])
181+
],
182+
pz: [
183+
this.aoColor(loaded['0:-1:1'] + loaded['-1:-1:1'] + loaded['-1:0:1']),
184+
this.aoColor(loaded['0:1:1'] + loaded['-1:1:1'] + loaded['-1:0:1']),
185+
this.aoColor(loaded['0:-1:1'] + loaded['1:-1:1'] + loaded['1:0:1']),
186+
this.aoColor(loaded['0:1:1'] + loaded['1:1:1'] + loaded['1:0:1'])
187+
],
188+
nz: [
189+
this.aoColor(loaded['0:-1:-1'] + loaded['1:-1:-1'] + loaded['1:0:-1']),
190+
this.aoColor(loaded['0:1:-1'] + loaded['1:1:-1'] + loaded['1:0:-1']),
191+
this.aoColor(loaded['0:-1:-1'] + loaded['-1:-1:-1'] + loaded['-1:0:-1']),
192+
this.aoColor(loaded['0:1:-1'] + loaded['-1:1:-1'] + loaded['-1:0:-1'])
193+
]
194+
})[type]
315195
const ile = 4
316196
if (block.name === 'water') {
317-
col1[0] /= ile
318-
col1[1] /= ile
319-
col2[0] /= ile
320-
col2[1] /= ile
321-
col3[0] /= ile
322-
col3[1] /= ile
323-
col4[0] /= ile
324-
col4[1] /= ile
325-
} else if (block.name === 'grass_block' && type === 'py') {
326-
col1[0] /= ile
327-
col1[2] /= ile
328-
col2[0] /= ile
329-
col2[2] /= ile
330-
col3[0] /= ile
331-
col3[2] /= ile
332-
col4[0] /= ile
333-
col4[2] /= ile
334-
} else if (block.name.includes('leaves')) {
335-
col1[0] /= ile
336-
col1[2] /= ile
337-
col2[0] /= ile
338-
col2[2] /= ile
339-
col3[0] /= ile
340-
col3[2] /= ile
341-
col4[0] /= ile
342-
col4[2] /= ile
197+
for (let i = 0; i < 4; i++) {
198+
col[i][0] /= ile
199+
col[i][1] /= ile
200+
}
201+
} else if ((block.name === 'grass_block' && type === 'py') || block.name.includes('leaves')) {
202+
for (let i = 0; i < 4; i++) {
203+
col[i][0] /= ile
204+
col[i][2] /= ile
205+
}
343206
}
344207

345208
faceVertex.color = [
346-
...col1,
347-
...col3,
348-
...col2,
349-
...col2,
350-
...col3,
351-
...col4
209+
...col[0],
210+
...col[2],
211+
...col[1],
212+
...col[1],
213+
...col[2],
214+
...col[3]
352215
]
353216
}
354217

@@ -407,16 +270,9 @@ class ChunkMesher {
407270
if (mainBlock.boundingBox === 'block') {
408271
for (const side in neighbours) {
409272
const nBlock = neighbours[side]
410-
if (mainBlock.transparent) {
411-
if (nBlock.boundingBox !== 'block') {
412-
this.addFace(tVertexBuffer, VertexBuffer, side, pos)
413-
}
414-
} else {
415-
if (
416-
nBlock.boundingBox !== 'block' || nBlock.transparent
417-
) {
418-
this.addFace(tVertexBuffer, VertexBuffer, side, pos)
419-
}
273+
if ((mainBlock.transparent && nBlock.boundingBox !== 'block') ||
274+
(nBlock.boundingBox !== 'block' || nBlock.transparent)) {
275+
this.addFace(tVertexBuffer, VertexBuffer, side, pos)
420276
}
421277
}
422278
} else if (this.customRender[mainBlock.name]) {

0 commit comments

Comments
 (0)