Skip to content

Commit 1548cb8

Browse files
committed
better creating Atlases
1 parent a93ba19 commit 1548cb8

File tree

9 files changed

+90
-87
lines changed

9 files changed

+90
-87
lines changed

.gitignore

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
node_modules
22
src/client/dist
3-
src/client/assets/blocks/blocksDef.json
4-
src/client/assets/blocks/blocksAtlas-full.png
5-
src/client/assets/blocks/blocksMapping-full.json
6-
src/client/assets/blocks/blocksMapping.json
3+
src/client/assets/blocks
74
src/client/assets/items
85
src/world

src/atlasCreator.coffee

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,18 @@ Canvas=require "canvas"
55
class AtlasCreator
66
constructor:(options)->
77
@pref=options.pref
8-
@size=options.size
9-
@xpath=options.xpath
8+
@oneFrame=options.oneFrame
9+
@toxelSize=options.toxelSize
10+
@loadPath=options.loadPath
1011
@buildPath=options.buildPath
11-
@totalImages=options.totalImages
1212
@atlasSize=options.atlasSize
13-
@mini=options.mini
14-
@miniAtlasSize=options.miniAtlasSize
15-
16-
@canvas=Canvas.createCanvas @atlasSize*@size,@atlasSize*@size
13+
@canvas=Canvas.createCanvas @atlasSize*@toxelSize,@atlasSize*@toxelSize
1714
@ctx=@canvas.getContext '2d'
1815
@toxelX=1
1916
@toxelY=1
20-
@miniX=1
21-
@miniY=1
2217
@loadedImages=0
2318
@images={}
2419
@textureMapping={}
25-
@miniMapping={}
2620
@emptyDir()
2721
@firstLoad()
2822
return
@@ -32,13 +26,21 @@ class AtlasCreator
3226
return
3327
firstLoad:()->
3428
_this=@
35-
fs.readdir @xpath, (err, files)->
29+
fs.readdir @loadPath, (err, files)->
30+
totalImages=0
31+
files.forEach (file)->
32+
filePath="#{_this.loadPath}/#{file}"
33+
if path.extname(file) is ".png"
34+
totalImages+=1
35+
return
36+
_this.totalImages=totalImages
3637
files.forEach (file)->
37-
filePath="#{_this.xpath}/#{file}"
38+
filePath="#{_this.loadPath}/#{file}"
3839
if path.extname(file) is ".png"
3940
# console.log filePath
4041
_this.addImageToLoad filePath,file
4142
return
43+
4244
return
4345
return
4446
addImageToLoad:(filePath,name)->
@@ -59,25 +61,23 @@ class AtlasCreator
5961
return
6062
@updateAtlas()
6163
addToxelToAtlas:(img,name)->
62-
w=img.width/@size
63-
h=img.height/@size
64-
if w>1 or h>1
65-
for i in [0..w-1]
66-
for j in [0..h-1]
67-
@ctx.drawImage img,i*@size,j*@size,@size,@size,(@toxelX-1)*@size,(@toxelY-1)*@size, @size,@size
68-
@textureMapping["#{name.substr(0,name.length-4)}@#{i}@#{j}"]={x:@toxelX,y:@toxelY}
69-
@moveToxel()
70-
else
71-
@ctx.drawImage img,(@toxelX-1)*@size,(@toxelY-1)*@size,@size,@size
72-
@textureMapping[name.substr(0,name.length-4)]={x:@toxelX,y:@toxelY}
64+
w=img.width/@toxelSize
65+
h=img.height/@toxelSize
66+
if @oneFrame
67+
@ctx.drawImage img,0,0,@toxelSize,@toxelSize,(@toxelX-1)*@toxelSize,(@toxelY-1)*@toxelSize, @toxelSize,@toxelSize
68+
@textureMapping["#{name.substr(0,name.length-4)}"]={x:@toxelX,y:@toxelY}
7369
@moveToxel()
74-
if @mini
75-
@miniMapping[name.substr(0,name.length-4)]={x:@miniX,y:@miniY}
76-
if @miniX is @miniAtlasSize
77-
@miniX=1
78-
@miniY+=1
70+
else
71+
if w>1 or h>1
72+
for i in [0..w-1]
73+
for j in [0..h-1]
74+
@ctx.drawImage img,i*@toxelSize,j*@toxelSize,@toxelSize,@toxelSize,(@toxelX-1)*@toxelSize,(@toxelY-1)*@toxelSize, @toxelSize,@toxelSize
75+
@textureMapping["#{name.substr(0,name.length-4)}@#{i}@#{j}"]={x:@toxelX,y:@toxelY}
76+
@moveToxel()
7977
else
80-
@miniX+=1
78+
@ctx.drawImage img,(@toxelX-1)*@toxelSize,(@toxelY-1)*@toxelSize,@toxelSize,@toxelSize
79+
@textureMapping[name.substr(0,name.length-4)]={x:@toxelX,y:@toxelY}
80+
@moveToxel()
8181
return
8282
moveToxel:()->
8383
if @toxelX is @atlasSize
@@ -87,13 +87,13 @@ class AtlasCreator
8787
@toxelX+=1
8888
return
8989
updateAtlas:(path)->
90-
fs.writeFileSync "#{@buildPath}/#{@pref}Atlas-full.png", @canvas.toBuffer('image/png')
91-
console.log "\x1b[33mFull atlas: #{@buildPath}/#{@pref}Atlas-full.png"
92-
fs.writeFileSync "#{@buildPath}/#{@pref}Mapping-full.json",JSON.stringify(@textureMapping,null,2)
93-
console.log "\x1b[33mFull atlas mapping: #{@buildPath}/#{@pref}Mapping-full.json"
94-
if @mini
95-
fs.writeFileSync "#{@buildPath}/#{@pref}Mapping.json",JSON.stringify(@miniMapping,null,2)
96-
console.log "\x1b[33mMini atlas mapping: #{@buildPath}/#{@pref}Mapping.json"
90+
91+
console.log "\x1b[33m[#{@pref} Atlas]"
92+
console.log "\x1b[32mTotal images: #{@totalImages}"
93+
fs.writeFileSync "#{@buildPath}/#{@pref}-Atlas.png", @canvas.toBuffer('image/png')
94+
console.log "\x1b[33mFull atlas: #{@buildPath}/#{@pref}-Atlas.png"
95+
fs.writeFileSync "#{@buildPath}/#{@pref}-Mapping.json",JSON.stringify(@textureMapping,null,2)
96+
console.log "\x1b[33mFull atlas mapping: #{@buildPath}/#{@pref}-Mapping.json"
9797
console.log "\x1b[32mSuccessfully generated #{@canvas.width}x#{@canvas.height} Texture Atlas!\n\x1b[0m"
9898
return
9999

src/client/assets/assetLoader.json

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
{
2-
"blocksMapping":{
3-
"path":"/assets/blocks/blocksMapping.json",
4-
"type":"text"
5-
},
6-
"blocksAtlasFull":{
7-
"path":"/assets/blocks/blocksAtlas-full.png",
8-
"type":"image"
9-
},
10-
"blocksMappingFull":{
11-
"path":"/assets/blocks/blocksMapping-full.json",
12-
"type":"text"
13-
},
14-
"skybox":{
15-
"path":"/assets/images/skybox.jpg",
16-
"type":"texture"
17-
},
2+
"blocksMapping":{
3+
"path":"/assets/blocks/blocksSnap-Mapping.json",
4+
"type":"text"
5+
},
6+
"blocksAtlasFull":{
7+
"path":"/assets/blocks/blocks-Atlas.png",
8+
"type":"image"
9+
},
10+
"blocksMappingFull":{
11+
"path":"/assets/blocks/blocks-Mapping.json",
12+
"type":"text"
13+
},
14+
"skybox":{
15+
"path":"/assets/images/skybox.jpg",
16+
"type":"texture"
17+
},
1818
"blocksTex":{
19-
"path":"/assets/blocks/blocks.json",
19+
"path":"/assets/blocks.json",
2020
"type":"text"
2121
},
2222
"player":{
@@ -28,15 +28,15 @@
2828
"type":"texture"
2929
},
3030
"blocksAtlasSnap":{
31-
"path":"/assets/blocks/blocksAtlas-snap.png",
31+
"path":"/assets/blocks/blocksSnap-Atlas.png",
3232
"type":"texture"
3333
},
3434
"blocksDef":{
3535
"path":"/assets/blocks/blocksDef.json",
3636
"type":"text"
3737
},
3838
"itemsMapping":{
39-
"path":"/assets/items/itemsMapping-full.json",
40-
"type":"text"
41-
}
39+
"path":"/assets/items/items-Mapping.json",
40+
"type":"text"
41+
}
4242
}
-214 KB
Binary file not shown.

src/client/scripts/InventoryBar.coffee

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class InventoryBar
7878
if $(list[i]).attr('data-texture') is ""
7979
url=""
8080
else
81-
url="/assets/items/itemsAtlas-full.png"
81+
url="/assets/items/items-Atlas.png"
8282
tex=43
8383
items=@game.al.get "itemsMapping"
8484
$(list[i]).css("background-repeat","no-repeat")

src/client/scripts/index.coffee

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ import {Entities} from "./Entities.coffee"
1515
import {PlayerInInventory} from "./PlayerInInventory.coffee"
1616
import {BlockBreak} from "./BlockBreak.coffee"
1717
import {BlockPlace} from "./BlockPlace.coffee"
18-
import "bootstrap"
19-
import './../styles/style.scss'
20-
import './../styles/style.css'
2118

2219
class Game
2320
constructor:(options)->

src/client/webpack.common.coffee

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ module.exports=
1010
stats:"detailed"
1111
performance:
1212
hints: false
13-
entry: "#{__dirname}/scripts/index.coffee"
13+
entry: [
14+
"#{__dirname}/scripts/index.coffee"
15+
"#{__dirname}/styles/style.scss"
16+
"#{__dirname}/styles/style.css"
17+
"bootstrap"
18+
]
1419
output:
1520
path: "#{__dirname}/dist"
1621
filename: '[contenthash].js'

src/prebuild.coffee

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,31 @@ config=require "./server.json"
33
pBlock=require("prismarine-block")(config.version)
44
atlasCreator=require "./atlasCreator.coffee"
55

6+
new atlasCreator {
7+
pref:"items"
8+
toxelSize:50
9+
loadPath:"#{__dirname}/assets/items"
10+
buildPath:"#{__dirname}/client/assets/items"
11+
atlasSize:32
12+
oneFrame:false
13+
}
14+
new atlasCreator {
15+
pref:"blocks"
16+
toxelSize:16
17+
loadPath:"#{__dirname}/assets/blocks"
18+
buildPath:"#{__dirname}/client/assets/blocks"
19+
atlasSize:36
20+
oneFrame:false
21+
}
22+
new atlasCreator {
23+
pref:"blocksSnap"
24+
toxelSize:16
25+
loadPath:"#{__dirname}/assets/blocks"
26+
buildPath:"#{__dirname}/client/assets/blocks"
27+
atlasSize:27
28+
oneFrame:true
29+
}
30+
631
maxStateId=0
732
for i in [0..100000]
833
block=pBlock.fromStateId i
@@ -21,24 +46,3 @@ buildPath="#{__dirname}/client/assets/blocks/blocksDef.json"
2146
fs.writeFileSync buildPath, JSON.stringify(result)
2247
console.log "\x1b[32mGenerated blocksDefinitions: #{buildPath}\x1b[0m\n"
2348

24-
new atlasCreator {
25-
pref:"items"
26-
size:50
27-
xpath:"#{__dirname}/assets/items"
28-
buildPath:"#{__dirname}/client/assets/items"
29-
totalImages:975
30-
atlasSize:32
31-
mini:false
32-
miniAtlasSize:0
33-
}
34-
new atlasCreator {
35-
pref:"blocks"
36-
size:16
37-
xpath:"#{__dirname}/assets/blocks"
38-
buildPath:"#{__dirname}/client/assets/blocks"
39-
totalImages:694
40-
atlasSize:36
41-
mini:true
42-
miniAtlasSize:27
43-
}
44-

0 commit comments

Comments
 (0)