Skip to content

Commit cb76c9e

Browse files
committed
Loading real chunks from server
1 parent 92fabfb commit cb76c9e

File tree

15 files changed

+627
-546
lines changed

15 files changed

+627
-546
lines changed

coffee/client/index.coffee

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ init = ()->
1717
chunkWorker=new Worker "./module/ChunkWorker.js", {type:'module'}
1818

1919
chunkWorker.onmessage=(data)->
20-
# console.log "Recieved chunk column", data.data
20+
result=data.data.result
21+
for i in result
22+
if i isnt null
23+
terrain.setCell(i.x,i.y,i.z,i.data)
2124

2225
#canvas,renderer,camera,lights
2326
canvas=document.querySelector '#c'
@@ -26,11 +29,16 @@ init = ()->
2629
PixelRatio:window.devicePixelRatio
2730
}
2831
scene=new THREE.Scene
29-
scene.background=new THREE.Color "lightblue"
30-
camera = new THREE.PerspectiveCamera 90, 2, 0.1, 64*5
32+
camera = new THREE.PerspectiveCamera 90, 2, 0.1, 1000
3133
camera.rotation.order = "YXZ"
3234
camera.position.set 26, 26, 26
33-
35+
#skybox
36+
loader = new THREE.TextureLoader();
37+
skybox = loader.load "assets/images/skybox.jpg", () ->
38+
rt = new THREE.WebGLCubeRenderTarget skybox.image.height
39+
rt.fromEquirectangularTexture renderer, skybox
40+
scene.background = rt
41+
return
3442
#Lights
3543
ambientLight=new THREE.AmbientLight 0xcccccc
3644
scene.add ambientLight
@@ -44,7 +52,7 @@ init = ()->
4452
clouds.scale.x=0.1
4553
clouds.scale.y=0.1
4654
clouds.scale.z=0.1
47-
clouds.position.y=100
55+
clouds.position.y=170
4856
scene.add clouds
4957

5058
#Animated Material
@@ -80,7 +88,6 @@ init = ()->
8088
terrain.setBlock block...
8189
return
8290
socket.on "mapChunk", (sections,x,z)->
83-
# console.log("Recieved mapChunk "+x+" "+z)
8491
chunkWorker.postMessage {
8592
type:"computeSections"
8693
data:{

coffee/client/module/CellTerrain.coffee

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class CellTerrain
3838
voff=@computeVoxelOffset voxelX,voxelY,voxelZ
3939
return cell[voff]
4040
getBuffer:(x,y,z)->
41-
console.log(@cells[@vec3(x,y,z)])
42-
return
41+
return @cells[@vec3(x,y,z)]
42+
setBuffer:(x,y,z,buffer)->
43+
@cells[@vec3(x,y,z)]=buffer
4344

4445
export {CellTerrain}

coffee/client/module/ChunkWorker.coffee

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class ChunkDecoder
4545
#NOTHING
4646
getBlockIndex: (pos)->
4747
return (pos.y << 8) | (pos.z << 4) | pos.x
48+
cvo: (voxelX,voxelY,voxelZ) ->
49+
x=voxelX %% 16|0
50+
y=voxelY %% 16|0
51+
z=voxelZ %% 16|0
52+
return y*16*16+z*16+x
4853
computeSections: (packet)->
4954
sections=packet.sections
5055
num=0
@@ -60,16 +65,18 @@ class ChunkDecoder
6065
y:0
6166
z:0
6267
}
63-
base=[]
68+
cell=new Uint8Array 16*16*16
6469
for x in [0..15]
6570
for y in [0..15]
6671
for z in [0..15]
67-
base.push(palette[data.get(@getBlockIndex({x,y,z}))])
72+
# ct.setVoxel packet.x+x,num+y,packet.z+z
73+
cell[@cvo(x,y,z)]=palette[data.get(@getBlockIndex({x,y,z}))]
74+
# base.push(palette[data.get(@getBlockIndex({x,y,z}))])
6875
result.push {
6976
x:packet.x
7077
y:num
7178
z:packet.z,
72-
data:base
79+
data:cell
7380
}
7481
else
7582
result.push(null)

coffee/client/module/Terrain.coffee

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,13 @@ class Terrain
3434
cellSize: @cellSize
3535
}
3636
}
37-
@neighbours=[[-1, 0, 0],[1, 0, 0],[0, -1, 0],[0, 1, 0],[0, 0, -1],[0, 0, 1]]
37+
setCell: (cellX,cellY,cellZ,buffer)->
38+
@_setCell cellX,cellY,cellZ,buffer
39+
@cellTerrain.cells[@cellTerrain.vec3(cellX,cellY,cellZ)]=buffer
40+
@cellNeedsUpdate[@cellTerrain.vec3(cellX,cellY,cellZ)]=true
41+
for nei in @neighbours
42+
neiCellId=@cellTerrain.vec3(cellX+nei[0],cellY+nei[1],cellZ+nei[2])
43+
@cellNeedsUpdate[neiCellId]=true
3844
setBlock: (voxelX,voxelY,voxelZ,value) ->
3945
voxelX=parseInt voxelX
4046
voxelY=parseInt voxelY
@@ -159,6 +165,11 @@ class Terrain
159165
return {posPlace,posBreak}
160166
else
161167
return false
168+
_setCell: (cellX,cellY,cellZ,buffer)->
169+
@worker.postMessage {
170+
type:"setCell"
171+
data:[cellX,cellY,cellZ,buffer]
172+
}
162173
_setVoxel: (voxelX,voxelY,voxelZ,value)->
163174
@worker.postMessage {
164175
type:"setVoxel"

coffee/client/module/TerrainWorker.coffee

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import {CellTerrain} from './CellTerrain.js'
2+
13
class TerrainManager
24
constructor: (options)->
35
@toxelSize=options.toxelSize
@@ -6,7 +8,9 @@ class TerrainManager
68
@blocksMapping=options.blocksMapping
79
@cellSize=options.cellSize
810
@models=options.models
9-
@world={}
11+
@cellTerrain=new CellTerrain {
12+
cellSize:@cellSize
13+
}
1014
console.log "WORKER: TerrainManager started!"
1115
getToxel: (x,y)->
1216
x-=1
@@ -30,8 +34,9 @@ class TerrainManager
3034
z=parseInt z
3135
return "#{x}:#{y}:#{z}"
3236
genBlockFace: (type,voxel)->
33-
blockName=@blocks[voxel]["faces"][type]
37+
3438
try
39+
blockName=@blocks[voxel]["faces"][type]
3540
toxX=@blocksMapping[blockName]["x"]
3641
toxY=@blocksMapping[blockName]["y"]
3742
catch e
@@ -123,18 +128,18 @@ class TerrainManager
123128
pos=[cellX*@cellSize+i,cellY*@cellSize+j,cellZ*@cellSize+k]
124129
voxel=@getVoxel pos...
125130
if voxel
126-
if @blocks[voxel].isBlock
127-
if not @blocks[@getVoxel(pos[0]+1,pos[1],pos[2])].isBlock
131+
if @blocks[voxel] is undefined or @blocks[voxel].isBlock
132+
if not (@blocks[@getVoxel(pos[0]+1,pos[1],pos[2])] is undefined or @blocks[@getVoxel(pos[0]+1,pos[1],pos[2])].isBlock)
128133
addFace "nx",pos,voxel
129-
if not @blocks[@getVoxel(pos[0]-1,pos[1],pos[2])].isBlock
134+
if not (@blocks[@getVoxel(pos[0]-1,pos[1],pos[2])] is undefined or @blocks[@getVoxel(pos[0]-1,pos[1],pos[2])].isBlock)
130135
addFace "px",pos,voxel
131-
if not @blocks[@getVoxel(pos[0],pos[1]-1,pos[2])].isBlock
136+
if not (@blocks[@getVoxel(pos[0],pos[1]-1,pos[2])] is undefined or @blocks[@getVoxel(pos[0],pos[1]-1,pos[2])].isBlock)
132137
addFace "ny",pos,voxel
133-
if not @blocks[@getVoxel(pos[0],pos[1]+1,pos[2])].isBlock
138+
if not (@blocks[@getVoxel(pos[0],pos[1]+1,pos[2])] is undefined or @blocks[@getVoxel(pos[0],pos[1]+1,pos[2])].isBlock)
134139
addFace "py",pos,voxel
135-
if not @blocks[@getVoxel(pos[0],pos[1],pos[2]+1)].isBlock
140+
if not (@blocks[@getVoxel(pos[0],pos[1],pos[2]+1)] is undefined or @blocks[@getVoxel(pos[0],pos[1],pos[2]+1)].isBlock)
136141
addFace "pz",pos,voxel
137-
if not @blocks[@getVoxel(pos[0],pos[1],pos[2]-1)].isBlock
142+
if not (@blocks[@getVoxel(pos[0],pos[1],pos[2]-1)] is undefined or @blocks[@getVoxel(pos[0],pos[1],pos[2]-1)].isBlock)
138143
addFace "nz",pos,voxel
139144
else
140145
geo=@models[@blocks[voxel].model]
@@ -145,14 +150,10 @@ class TerrainManager
145150
uvs
146151
}
147152
setVoxel: (voxelX,voxelY,voxelZ,value)->
148-
@world[@vec3(voxelX,voxelY,voxelZ)]=value
153+
@cellTerrain.setVoxel voxelX,voxelY,voxelZ,value
149154
return
150155
getVoxel: (voxelX,voxelY,voxelZ)->
151-
voxel=@world[@vec3(voxelX,voxelY,voxelZ)]
152-
if voxel is undefined
153-
return 0
154-
else
155-
return voxel
156+
return @cellTerrain.getVoxel voxelX,voxelY,voxelZ
156157

157158
addEventListener "message", (e)->
158159
fn = handlers[e.data.type]
@@ -183,4 +184,6 @@ handlers={
183184
cell:terrain.genCellGeo data...
184185
info:data
185186
}
187+
setCell: (data)->
188+
terrain.cellTerrain.cells["#{data[0]}:#{data[1]}:#{data[2]}"]=data[3]
186189
}

coffee/server.coffee

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ module.exports=(config)->
2323
players={}
2424
socketInfo={}
2525

26-
2726
app.use express.static(__dirname + "/client/")
2827
app.use (req, res, next) ->
2928
res.set 'Cache-Control', 'no-store'
@@ -41,7 +40,7 @@ module.exports=(config)->
4140

4241
#Trying to run special functions
4342
socket.on "initClient",(data)->
44-
console.log "[+] "+socket.id
43+
console.log "[+] "+data.nick
4544
#init socketInfo
4645
socketInfo[socket.id]=data
4746

@@ -79,7 +78,7 @@ module.exports=(config)->
7978
io.sockets.emit "blockUpdate",block
8079
saveWorld()
8180
socket.on "disconnect", ->
82-
console.log "[-] "+socket.id
81+
console.log "[-] "+socketInfo[socket.id].nick
8382

8483
#end bot session
8584
socketInfo[socket.id].bot.end()

src/client/assets/blocks/blocks.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,4 @@
104104
"pz": "tnt_side"
105105
}
106106
}
107-
}
107+
}
14.6 KB
Loading

src/client/index.js

Lines changed: 25 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/client/module/CellTerrain.js

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)