|
1 | 1 | import {CellTerrain} from './CellTerrain.js' |
2 | | -import {Block} from './../build/Block.js' |
| 2 | +import {BlockGeo} from './BlockGeo.js' |
| 3 | + |
3 | 4 | console.log "CHUNK WORKER STARTED!" |
| 5 | + |
4 | 6 | class TerrainManager |
5 | 7 | constructor: (options)-> |
6 | | - @toxelSize=options.toxelSize |
7 | | - @q=1/@toxelSize |
8 | | - @blocks=options.blocks |
9 | | - @blocksMapping=options.blocksMapping |
10 | 8 | @cellSize=options.cellSize |
11 | | - @models=options.models |
12 | 9 | @cellTerrain=new CellTerrain { |
13 | 10 | cellSize:@cellSize |
14 | 11 | } |
15 | | - getToxel: (x,y)-> |
16 | | - x-=1 |
17 | | - y-=1 |
18 | | - x1=@q*x |
19 | | - y1=1-@q*y-@q |
20 | | - x2=@q*x+@q |
21 | | - y2=1-@q*y |
22 | | - return [ |
23 | | - [x1,y1] |
24 | | - [x1,y2] |
25 | | - [x2,y1] |
26 | | - [x2,y2] |
27 | | - ] |
28 | | - genBlockFace: (type,block,pos)-> |
29 | | - if block.name is "water" |
30 | | - toxX=@blocksMapping["water_flow"]["x"] |
31 | | - toxY=@blocksMapping["water_flow"]["y"] |
32 | | - else if @blocksMapping[block.name] |
33 | | - toxX=@blocksMapping[block.name]["x"] |
34 | | - toxY=@blocksMapping[block.name]["y"] |
35 | | - else |
36 | | - toxX=@blocksMapping["debug"]["x"] |
37 | | - toxY=28-@blocksMapping["debug"]["y"] |
38 | | - uv=@getToxel toxX,toxY |
39 | | - switch type |
40 | | - when "pz" |
41 | | - return { |
42 | | - pos:[-0.5+pos[0], -0.5+pos[1], 0.5+pos[2],0.5+pos[0], -0.5+pos[1], 0.5+pos[2],-0.5+pos[0], 0.5+pos[1], 0.5+pos[2],-0.5+pos[0], 0.5+pos[1], 0.5+pos[2],0.5+pos[0], -0.5+pos[1], 0.5+pos[2],0.5+pos[0], 0.5+pos[1], 0.5+pos[2]] |
43 | | - norm:[0, 0, 1,0, 0, 1,0, 0, 1,0, 0, 1,0, 0, 1,0, 0, 1] |
44 | | - uv:[uv[0]...,uv[2]...,uv[1]...,uv[1]...,uv[2]...,uv[3]...] |
45 | | - } |
46 | | - when "nx" |
47 | | - return { |
48 | | - pos:[ 0.5+pos[0], -0.5+pos[1], 0.5+pos[2], 0.5+pos[0], -0.5+pos[1], -0.5+pos[2],0.5+pos[0], 0.5+pos[1], 0.5+pos[2], 0.5+pos[0], 0.5+pos[1], 0.5+pos[2],0.5+pos[0], -0.5+pos[1], -0.5+pos[2], 0.5+pos[0], 0.5+pos[1], -0.5+pos[2]] |
49 | | - norm:[ 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0] |
50 | | - uv:[uv[0]...,uv[2]...,uv[1]...,uv[1]...,uv[2]...,uv[3]...] |
51 | | - } |
52 | | - when "nz" |
53 | | - return { |
54 | | - pos:[ 0.5+pos[0], -0.5+pos[1], -0.5+pos[2],-0.5+pos[0], -0.5+pos[1], -0.5+pos[2],0.5+pos[0], 0.5+pos[1], -0.5+pos[2], 0.5+pos[0], 0.5+pos[1], -0.5+pos[2],-0.5+pos[0], -0.5+pos[1], -0.5+pos[2],-0.5+pos[0], 0.5+pos[1], -0.5+pos[2]] |
55 | | - norm:[ 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1] |
56 | | - uv:[uv[0]...,uv[2]...,uv[1]...,uv[1]...,uv[2]...,uv[3]...] |
57 | | - } |
58 | | - when "px" |
59 | | - return { |
60 | | - pos:[-0.5+pos[0], -0.5+pos[1], -0.5+pos[2],-0.5+pos[0], -0.5+pos[1], 0.5+pos[2],-0.5+pos[0], 0.5+pos[1], -0.5+pos[2],-0.5+pos[0], 0.5+pos[1], -0.5+pos[2],-0.5+pos[0], -0.5+pos[1], 0.5+pos[2],-0.5+pos[0], 0.5+pos[1], 0.5+pos[2]] |
61 | | - norm:[-1, 0, 0,-1, 0, 0,-1, 0, 0,-1, 0, 0,-1, 0, 0,-1, 0, 0] |
62 | | - uv:[uv[0]...,uv[2]...,uv[1]...,uv[1]...,uv[2]...,uv[3]...] |
63 | | - } |
64 | | - when "py" |
65 | | - return { |
66 | | - pos:[ 0.5+pos[0], 0.5+pos[1], -0.5+pos[2],-0.5+pos[0], 0.5+pos[1], -0.5+pos[2],0.5+pos[0], 0.5+pos[1], 0.5+pos[2], 0.5+pos[0], 0.5+pos[1], 0.5+pos[2],-0.5+pos[0], 0.5+pos[1], -0.5+pos[2],-0.5+pos[0], 0.5+pos[1], 0.5+pos[2]] |
67 | | - norm:[ 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0] |
68 | | - uv:[uv[0]...,uv[2]...,uv[1]...,uv[1]...,uv[2]...,uv[3]...] |
69 | | - } |
70 | | - when "ny" |
71 | | - return { |
72 | | - pos:[ 0.5+pos[0], -0.5+pos[1], 0.5+pos[2],-0.5+pos[0], -0.5+pos[1], 0.5+pos[2],0.5+pos[0], -0.5+pos[1], -0.5+pos[2], 0.5+pos[0], -0.5+pos[1], -0.5+pos[2],-0.5+pos[0], -0.5+pos[1], 0.5+pos[2],-0.5+pos[0], -0.5+pos[1], -0.5+pos[2]] |
73 | | - norm:[ 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0] |
74 | | - uv:[uv[0]...,uv[2]...,uv[1]...,uv[1]...,uv[2]...,uv[3]...] |
75 | | - } |
| 12 | + @BlockGeo=new BlockGeo { |
| 13 | + toxelSize:options.toxelSize |
| 14 | + blocksMapping:options.blocksMapping |
| 15 | + } |
76 | 16 | genCellGeo: (cellX,cellY,cellZ)-> |
77 | 17 | _this=@ |
78 | 18 | positions=[] |
79 | 19 | normals=[] |
80 | 20 | uvs=[] |
81 | 21 | addFace=(type,pos)-> |
82 | | - faceVertex=_this.genBlockFace type,_this.cellTerrain.getBlock(pos...),pos |
| 22 | + faceVertex=_this.BlockGeo.genBlockFace type,_this.cellTerrain.getBlock(pos...),pos |
83 | 23 | positions.push faceVertex.pos... |
84 | 24 | normals.push faceVertex.norm... |
85 | 25 | uvs.push faceVertex.uv... |
86 | 26 | return |
87 | | - addGeo=(geo,pos)-> |
88 | | - posi=geo.position.array |
89 | | - norm=geo.normal.array |
90 | | - uv=geo.uv.array |
91 | | - for i in [0..posi.length-1] |
92 | | - positions.push posi[i]+pos[i%3] |
93 | | - normals.push norm... |
94 | | - uvs.push uv... |
95 | | - return |
96 | 27 | for i in [0..@cellSize-1] |
97 | 28 | for j in [0..@cellSize-1] |
98 | 29 | for k in [0..@cellSize-1] |
|
0 commit comments