= Array(0, { TilesetIndex() })
@@ -83,70 +91,77 @@
println("map data is loaded")
val tilesets = data.tilesets
if (tilesets != null) {
- tiles = Array(tilesets.size, { "" })
+ tileset = Array(tilesets.size, { "" })
+ var maxGid = 0
for (index in 0..tilesets.size - 1) {
- tiles[index] = tilesets[index].name
+ tileset[index] = tilesets[index].name
Textures.load(tilesets[index].name, tileDir + tilesets[index].image)
+ maxGid = Math.max(maxGid, tilesets[index].firstgid + tilesets[index].tilecount)
}
+
+ tiles = Array(maxGid, { TilesetIndex() })
} else {
- tiles = Array(0, { "" })
+ tileset = Array(0, { "" })
+ tiles = Array(0, { TilesetIndex() })
+ }
+
+ cacheTiles()
+ }
+
+ fun cacheTiles() {
+ if (!Textures.ready()) {
+ window.setTimeout({ cacheTiles() }, 10)
+ } else {
+ val tilesets = data.tilesets
+ var tcLeft = 0f
+ var tcTop = 0f
+ var tcRight = 0f
+ var tcBottom = 0f
+
+ if (tilesets != null) {
+
+
+ for (tileset in tilesets) {
+ val tilesHor = tileset.imagewidth / tileset.tilewidth
+ val tilesVer = tileset.imageheight / tileset.tileheight
+ val scale = (tileset.tilewidth / tileset.imagewidth.toFloat())
+
+ for (index in tileset.firstgid..tileset.firstgid + tileset.tilecount) {
+ val texture = Textures.get(tileset.name)
+
+ val gid = index - tileset.firstgid
+
+ val xi = gid % tilesHor
+ var yi = gid / tilesHor
+ yi = tilesVer - yi - 1
+ val tw = 1f / tilesHor.toFloat()
+ val th = 1f / tilesVer.toFloat()
+
+ val pixelW = 0.1f / tileset.tilewidth
+ val pixelH = 0.1f / tileset.tileheight
+
+ tcLeft = xi * tw
+ tcRight = tcLeft + tw
+
+ // switch up/down because of texture coord 0,0 in left bottom corner
+ tcBottom = yi * th
+ tcTop = tcBottom + th
+
+ tcLeft += pixelW
+ tcRight -= pixelW
+
+ tcBottom += pixelH
+ tcTop -= pixelH
+
+ tiles[index] = TilesetIndex(texture, tcLeft, tcTop, tcRight, tcBottom, scale)
+ }
+ }
+ }
}
}
fun drawTile(tile: Int, x: Float, y: Float) {
- if (first) {
- //println("Draw $tile on ($x, $y)")
- }
- val tilesets = data.tilesets
- var name: String? = null
- var gid: Int
- var tcLeft = 0f
- var tcTop = 0f
- var tcRight = 0f
- var tcBottom = 0f
- var scale = 1f
-
- if (tilesets != null) {
- for (tileset in tilesets) {
- val tilesHor = tileset.imagewidth / tileset.tilewidth
- val tilesVer = tileset.imageheight / tileset.tileheight
-
- if (tile >= tileset.firstgid && tile < tileset.firstgid + tileset.tilecount) {
- name = tileset.name
- gid = tile - tileset.firstgid
-
- val xi = gid % tilesHor
- var yi = gid / tilesHor
- yi = tilesVer - yi - 1
- val tw = 1f / tilesHor.toFloat()
- val th = 1f / tilesVer.toFloat()
-
- val pixelW = 0.1f / tileset.tilewidth
- val pixelH = 0.1f / tileset.tileheight
-
- tcLeft = xi * tw
- tcRight = tcLeft + tw
-
- // switch up/down because of texture coord 0,0 in left bottom corner
- tcBottom = yi * th
- tcTop = tcBottom + th
-
- tcLeft += pixelW
- tcRight -= pixelW
-
- tcBottom += pixelH
- tcTop -= pixelH
-
- scale = (tileset.tilewidth / tileset.imagewidth.toFloat())
- }
- }
- }
-
- if (name != null) {
- val texture = Textures.get(name)
-
- texture.queueTileDraw(x, y, tcLeft, tcTop, tcRight, tcBottom, scale)
- }
+ tiles[tile].render(x, y)
}
fun drawLayer(layerIndex: Int, xo: Float, yo: Float) {
diff --git a/web/index.html b/web/index.html
index c6d2a42..c8615d7 100644
--- a/web/index.html
+++ b/web/index.html
@@ -51,15 +51,18 @@
- Pause
- Music
- Show FPS
+ Pause
+ Music
+ Show FPS
+