Huge performance improvement

This commit is contained in:
Jean-André Santoni 2017-06-28 22:33:55 +02:00
parent 3dc814ef2a
commit adc2ed46c9

View File

@ -12,7 +12,7 @@ function tiled_load(filename)
end end
-- cache the corresponding tileset for each tile -- cache the corresponding tileset for each tile
map.tileset_for_id = {} map.by_id = {}
for i = 1, #map.layers do for i = 1, #map.layers do
local layer = map.layers[i] local layer = map.layers[i]
if layer.type == "tilelayer" then if layer.type == "tilelayer" then
@ -20,7 +20,27 @@ function tiled_load(filename)
for j = 1, #data do for j = 1, #data do
local id = data[j] local id = data[j]
if (id > 0) then if (id > 0) then
map.tileset_for_id[id] = tiled_get_tileset(map, id) map.by_id[id] = {}
local y = math.floor((j-1) / layer.width) * map.tileheight
local x = ((j-1) % layer.width) * map.tilewidth
local t = tiled_get_tileset(map, id)
local tw = map.tilewidth
local th = map.tileheight
local sw = t.sw
local sh = t.sh
local tid = id - t.firstgid + 1
local q = lutro.graphics.newQuad(
((tid-1)%(sw/tw))*tw,
math.floor((tid-1)/(sw/tw))*tw,
tw, th,
sw, sh)
map.by_id[id].t = t
map.by_id[id].q = q
map.by_id[id].x = x
map.by_id[id].y = y
end end
end end
end end
@ -45,22 +65,12 @@ function tiled_draw_layer(layer)
for j = 1, #data do for j = 1, #data do
local id = data[j] local id = data[j]
if (id > 0) then if (id > 0) then
local cache = map.by_id[id]
local y = math.floor((j-1) / layer.width) * map.tileheight local y = math.floor((j-1) / layer.width) * map.tileheight
local x = ((j-1) % layer.width) * map.tilewidth local x = ((j-1) % layer.width) * map.tilewidth
local t = map.tileset_for_id[id]
local tw = map.tilewidth
local th = map.tileheight
local sw = t.sw
local sh = t.sh
local tid = id - t.firstgid + 1
local q = lutro.graphics.newQuad( lutro.graphics.draw(cache.t.surface, cache.q, x, y)
((tid-1)%(sw/tw))*tw,
math.floor((tid-1)/(sw/tw))*tw,
tw, th,
sw, sh)
lutro.graphics.draw(t.surface, q, x, y)
end end
end end
end end