1
0
Fork 0
mirror of https://github.com/Reuh/ubiquitousse.git synced 2025-10-27 09:09:30 +00:00
ubiquitousse/ldtk/ldtk.lua

489 lines
22 KiB
Lua

local lg -- ./ldtk/ldtk.can:38
lg = (love or {})["graphics"] -- ./ldtk/ldtk.can:38
local newQuad -- ./ldtk/ldtk.can:39
if lg then -- ./ldtk/ldtk.can:40
newQuad = lg["newQuad"] -- ./ldtk/ldtk.can:41
else -- ./ldtk/ldtk.can:41
newQuad = function(x, y, w, h, image) -- ./ldtk/ldtk.can:43
return { -- ./ldtk/ldtk.can:44
x, -- ./ldtk/ldtk.can:44
y, -- ./ldtk/ldtk.can:44
w, -- ./ldtk/ldtk.can:44
h -- ./ldtk/ldtk.can:44
} -- ./ldtk/ldtk.can:44
end -- ./ldtk/ldtk.can:44
end -- ./ldtk/ldtk.can:44
local json_decode -- ./ldtk/ldtk.can:49
json_decode = require((...):gsub("ldtk$", "json"))["decode"] -- ./ldtk/ldtk.can:49
local readJson -- ./ldtk/ldtk.can:50
readJson = function(file) -- ./ldtk/ldtk.can:50
local f -- ./ldtk/ldtk.can:51
f = assert(io["open"](file, "r")) -- ./ldtk/ldtk.can:51
local t = json_decode(f:read("*a")) -- ./ldtk/ldtk.can:52
f:close() -- ./ldtk/ldtk.can:53
return t -- ./ldtk/ldtk.can:54
end -- ./ldtk/ldtk.can:54
local parseColor -- ./ldtk/ldtk.can:58
parseColor = function(str) -- ./ldtk/ldtk.can:58
local r, g, b = str:match("^#(..)(..)(..)") -- ./ldtk/ldtk.can:59
r, g, b = tonumber(r, 16), tonumber(g, 16), tonumber(b, 16) -- ./ldtk/ldtk.can:60
return { -- ./ldtk/ldtk.can:61
r / 255, -- ./ldtk/ldtk.can:61
g / 255, -- ./ldtk/ldtk.can:61
b / 255 -- ./ldtk/ldtk.can:61
} -- ./ldtk/ldtk.can:61
end -- ./ldtk/ldtk.can:61
local white -- ./ldtk/ldtk.can:63
white = { -- ./ldtk/ldtk.can:63
1, -- ./ldtk/ldtk.can:63
1, -- ./ldtk/ldtk.can:63
1 -- ./ldtk/ldtk.can:63
} -- ./ldtk/ldtk.can:63
local toLua -- ./ldtk/ldtk.can:66
toLua = function(type, val) -- ./ldtk/ldtk.can:66
if val == nil then -- ./ldtk/ldtk.can:67
return val -- ./ldtk/ldtk.can:67
end -- ./ldtk/ldtk.can:67
if type:match("^Array%<") then -- ./ldtk/ldtk.can:68
local itype = type:match("^Array%<(.*)%>$") -- ./ldtk/ldtk.can:69
for i, v in ipairs(val) do -- ./ldtk/ldtk.can:70
val[i] = toLua(itype, v) -- ./ldtk/ldtk.can:71
end -- ./ldtk/ldtk.can:71
elseif type == "Color" then -- ./ldtk/ldtk.can:73
return parseColor(val) -- ./ldtk/ldtk.can:74
elseif type == "Point" then -- ./ldtk/ldtk.can:75
return { -- ./ldtk/ldtk.can:76
["x"] = val["cx"], -- ./ldtk/ldtk.can:76
["y"] = val["cy"] -- ./ldtk/ldtk.can:76
} -- ./ldtk/ldtk.can:76
end -- ./ldtk/ldtk.can:76
return val -- ./ldtk/ldtk.can:78
end -- ./ldtk/ldtk.can:78
local getFields -- ./ldtk/ldtk.can:80
getFields = function(f) -- ./ldtk/ldtk.can:80
local t = {} -- ./ldtk/ldtk.can:81
for _, v in ipairs(f) do -- ./ldtk/ldtk.can:82
t[v["__identifier"]] = toLua(v["__type"], v["__value"]) -- ./ldtk/ldtk.can:83
end -- ./ldtk/ldtk.can:83
return t -- ./ldtk/ldtk.can:85
end -- ./ldtk/ldtk.can:85
local tileset_mt -- ./ldtk/ldtk.can:88
local make_cache -- ./ldtk/ldtk.can:91
make_cache = function(new_fn) -- ./ldtk/ldtk.can:91
return setmetatable({}, { -- ./ldtk/ldtk.can:92
["__mode"] = "v", -- ./ldtk/ldtk.can:93
["__call"] = function(cache, id) -- ./ldtk/ldtk.can:94
if not cache[id] then -- ./ldtk/ldtk.can:95
cache[id] = new_fn(id) -- ./ldtk/ldtk.can:96
end -- ./ldtk/ldtk.can:96
return cache[id] -- ./ldtk/ldtk.can:98
end -- ./ldtk/ldtk.can:98
}) -- ./ldtk/ldtk.can:98
end -- ./ldtk/ldtk.can:98
local cache -- ./ldtk/ldtk.can:102
cache = { -- ./ldtk/ldtk.can:102
["tileset"] = make_cache(function(tilesetDef) -- ./ldtk/ldtk.can:103
return tileset_mt["_init"](tilesetDef) -- ./ldtk/ldtk.can:104
end), -- ./ldtk/ldtk.can:104
["image"] = make_cache(function(path) -- ./ldtk/ldtk.can:106
if lg then -- ./ldtk/ldtk.can:107
return lg["newImage"](path) -- ./ldtk/ldtk.can:108
else -- ./ldtk/ldtk.can:108
return path -- ./ldtk/ldtk.can:110
end -- ./ldtk/ldtk.can:110
end) -- ./ldtk/ldtk.can:110
} -- ./ldtk/ldtk.can:110
tileset_mt = { -- ./ldtk/ldtk.can:118
["_newQuad"] = function(self, x, y, width, height) -- ./ldtk/ldtk.can:119
return newQuad(x, y, width, height, self["image"]) -- ./ldtk/ldtk.can:120
end, -- ./ldtk/ldtk.can:120
["_getTileQuad"] = function(self, tileid, x, y, size) -- ./ldtk/ldtk.can:122
if not self["_tileQuads"][tileid] then -- ./ldtk/ldtk.can:123
self["_tileQuads"][tileid] = self:_newQuad(x, y, size, size) -- ./ldtk/ldtk.can:124
end -- ./ldtk/ldtk.can:124
return self["_tileQuads"][tileid] -- ./ldtk/ldtk.can:126
end, -- ./ldtk/ldtk.can:126
["_init"] = function(tilesetDef) -- ./ldtk/ldtk.can:128
local t = { -- ./ldtk/ldtk.can:129
["image"] = cache["image"](tilesetDef["path"]), -- ./ldtk/ldtk.can:132
["_tileQuads"] = {} -- ./ldtk/ldtk.can:134
} -- ./ldtk/ldtk.can:134
return setmetatable(t, tileset_mt) -- ./ldtk/ldtk.can:136
end -- ./ldtk/ldtk.can:136
} -- ./ldtk/ldtk.can:136
tileset_mt["__index"] = tileset_mt -- ./ldtk/ldtk.can:139
local layer_mt -- ./ldtk/ldtk.can:146
layer_mt = { -- ./ldtk/ldtk.can:146
["draw"] = function(self, x, y) -- ./ldtk/ldtk.can:154
if x == nil then x = 0 end -- ./ldtk/ldtk.can:154
if y == nil then y = 0 end -- ./ldtk/ldtk.can:154
if self["visible"] then -- ./ldtk/ldtk.can:155
lg["push"]() -- ./ldtk/ldtk.can:156
lg["translate"](x + self["x"], y + self["y"]) -- ./ldtk/ldtk.can:157
if self["spritebatch"] then -- ./ldtk/ldtk.can:158
lg["setColor"](1, 1, 1, self["opacity"]) -- ./ldtk/ldtk.can:159
lg["draw"](self["spritebatch"]) -- ./ldtk/ldtk.can:160
elseif self["intTiles"] then -- ./ldtk/ldtk.can:161
for _, t in ipairs(self["intTiles"]) do -- ./ldtk/ldtk.can:162
lg["setColor"](t["color"]) -- ./ldtk/ldtk.can:163
lg["rectangle"]("fill", t["x"], t["y"], t["layer"]["gridSize"], t["layer"]["gridSize"]) -- ./ldtk/ldtk.can:164
end -- ./ldtk/ldtk.can:164
elseif self["entities"] then -- ./ldtk/ldtk.can:166
for _, e in ipairs(self["entities"]) do -- ./ldtk/ldtk.can:167
if e["draw"] then -- ./ldtk/ldtk.can:168
e:draw() -- ./ldtk/ldtk.can:168
end -- ./ldtk/ldtk.can:168
end -- ./ldtk/ldtk.can:168
end -- ./ldtk/ldtk.can:168
lg["pop"]() -- ./ldtk/ldtk.can:171
end -- ./ldtk/ldtk.can:171
end, -- ./ldtk/ldtk.can:171
["_unloadCallbacks"] = function(self, callbacks) -- ./ldtk/ldtk.can:175
local onRemoveTile = callbacks["onRemoveTile"] -- ./ldtk/ldtk.can:176
if self["tiles"] and onRemoveTile then -- ./ldtk/ldtk.can:177
for _, t in ipairs(self["tiles"]) do -- ./ldtk/ldtk.can:178
onRemoveTile(t) -- ./ldtk/ldtk.can:179
end -- ./ldtk/ldtk.can:179
end -- ./ldtk/ldtk.can:179
local onRemoveIntTile = callbacks["onRemoveIntTile"] -- ./ldtk/ldtk.can:182
if self["intTiles"] and onRemoveIntTile then -- ./ldtk/ldtk.can:183
for _, t in ipairs(self["intTiles"]) do -- ./ldtk/ldtk.can:184
onRemoveIntTile(t) -- ./ldtk/ldtk.can:185
end -- ./ldtk/ldtk.can:185
end -- ./ldtk/ldtk.can:185
local onRemoveEntity = callbacks["onRemoveEntity"] -- ./ldtk/ldtk.can:188
if self["entities"] and onRemoveEntity then -- ./ldtk/ldtk.can:189
for _, e in ipairs(self["entities"]) do -- ./ldtk/ldtk.can:190
onRemoveEntity(e) -- ./ldtk/ldtk.can:191
end -- ./ldtk/ldtk.can:191
end -- ./ldtk/ldtk.can:191
end, -- ./ldtk/ldtk.can:191
["_init"] = function(layer, level, order, callbacks) -- ./ldtk/ldtk.can:195
local gridSize -- ./ldtk/ldtk.can:196
gridSize = layer["__gridSize"] -- ./ldtk/ldtk.can:196
local t -- ./ldtk/ldtk.can:197
t = { -- ./ldtk/ldtk.can:197
["level"] = level, -- ./ldtk/ldtk.can:200
["identifier"] = layer["__identifier"], -- ./ldtk/ldtk.can:203
["type"] = layer["__type"], -- ./ldtk/ldtk.can:206
["visible"] = layer["visible"], -- ./ldtk/ldtk.can:209
["opacity"] = layer["opacity"], -- ./ldtk/ldtk.can:212
["order"] = order, -- ./ldtk/ldtk.can:215
["x"] = layer["__pxTotalOffsetX"], -- ./ldtk/ldtk.can:218
["y"] = layer["__pxTotalOffsetY"], -- ./ldtk/ldtk.can:221
["gridSize"] = gridSize, -- ./ldtk/ldtk.can:224
["gridWidth"] = layer["__cWid"], -- ./ldtk/ldtk.can:227
["gridHeight"] = layer["__cHei"], -- ./ldtk/ldtk.can:230
["entities"] = nil, -- ./ldtk/ldtk.can:233
["tiles"] = nil, -- ./ldtk/ldtk.can:237
["tileset"] = nil, -- ./ldtk/ldtk.can:241
["spritebatch"] = nil, -- ./ldtk/ldtk.can:246
["intTiles"] = nil -- ./ldtk/ldtk.can:250
} -- ./ldtk/ldtk.can:250
if layer["__tilesetDefUid"] then -- ./ldtk/ldtk.can:253
t["tiles"] = {} -- ./ldtk/ldtk.can:254
local tilesetData = level["project"]["_tilesetData"][layer["__tilesetDefUid"]] -- ./ldtk/ldtk.can:255
t["tileset"] = cache["tileset"](tilesetData) -- ./ldtk/ldtk.can:256
local tiles = layer["__type"] == "Tiles" and layer["gridTiles"] or layer["autoLayerTiles"] -- ./ldtk/ldtk.can:257
local onAddTile = callbacks["onAddTile"] -- ./ldtk/ldtk.can:258
if lg then -- ./ldtk/ldtk.can:259
t["spritebatch"] = lg["newSpriteBatch"](t["tileset"]["image"]) -- ./ldtk/ldtk.can:259
end -- ./ldtk/ldtk.can:259
for _, tl in ipairs(tiles) do -- ./ldtk/ldtk.can:260
local quad -- ./ldtk/ldtk.can:261
quad = t["tileset"]:_getTileQuad(tl["t"], tl["src"][1], tl["src"][2], gridSize) -- ./ldtk/ldtk.can:261
local sx, sy = 1, 1 -- ./ldtk/ldtk.can:262
local x, y -- ./ldtk/ldtk.can:263
x, y = tl["px"][1], tl["px"][2] -- ./ldtk/ldtk.can:263
local tile -- ./ldtk/ldtk.can:271
tile = { -- ./ldtk/ldtk.can:271
["layer"] = t, -- ./ldtk/ldtk.can:274
["x"] = x, -- ./ldtk/ldtk.can:277
["y"] = y, -- ./ldtk/ldtk.can:280
["flipX"] = false, -- ./ldtk/ldtk.can:283
["flipY"] = false, -- ./ldtk/ldtk.can:286
["tags"] = tilesetData[tl["t"]]["tags"], -- ./ldtk/ldtk.can:289
["data"] = tilesetData[tl["t"]]["data"], -- ./ldtk/ldtk.can:292
["quad"] = quad -- ./ldtk/ldtk.can:296
} -- ./ldtk/ldtk.can:296
if tl["f"] == 1 or tl["f"] == 3 then -- ./ldtk/ldtk.can:298
sx = - 1 -- ./ldtk/ldtk.can:299
x = x + (gridSize) -- ./ldtk/ldtk.can:300
tile["flipX"] = true -- ./ldtk/ldtk.can:301
end -- ./ldtk/ldtk.can:301
if tl["f"] == 2 or tl["f"] == 3 then -- ./ldtk/ldtk.can:303
sy = - 1 -- ./ldtk/ldtk.can:304
y = y + (gridSize) -- ./ldtk/ldtk.can:305
tile["flipY"] = true -- ./ldtk/ldtk.can:306
end -- ./ldtk/ldtk.can:306
if t["spritebatch"] then -- ./ldtk/ldtk.can:308
t["spritebatch"]:add(quad, x, y, 0, sx, sy) -- ./ldtk/ldtk.can:308
end -- ./ldtk/ldtk.can:308
table["insert"](t["tiles"], tile) -- ./ldtk/ldtk.can:309
if onAddTile then -- ./ldtk/ldtk.can:310
onAddTile(tile) -- ./ldtk/ldtk.can:310
end -- ./ldtk/ldtk.can:310
end -- ./ldtk/ldtk.can:310
elseif layer["__type"] == "IntGrid" then -- ./ldtk/ldtk.can:313
t["intTiles"] = {} -- ./ldtk/ldtk.can:314
local onAddIntTile = callbacks["onAddIntTile"] -- ./ldtk/ldtk.can:315
local values = level["project"]["_layerDef"][layer["layerDefUid"]]["intGridValues"] -- ./ldtk/ldtk.can:316
for i, tl in ipairs(layer["intGridCsv"]) do -- ./ldtk/ldtk.can:317
if tl > 0 then -- ./ldtk/ldtk.can:318
local y -- ./ldtk/ldtk.can:319
y = math["floor"]((i - 1) / t["gridWidth"]) * gridSize -- ./ldtk/ldtk.can:319
local x -- ./ldtk/ldtk.can:320
x = ((i - 1) % t["gridWidth"]) * gridSize -- ./ldtk/ldtk.can:320
local tile -- ./ldtk/ldtk.can:328
tile = { -- ./ldtk/ldtk.can:328
["layer"] = t, -- ./ldtk/ldtk.can:331
["x"] = x, -- ./ldtk/ldtk.can:334
["y"] = y, -- ./ldtk/ldtk.can:337
["identifier"] = values[tl]["identifier"], -- ./ldtk/ldtk.can:340
["value"] = tl, -- ./ldtk/ldtk.can:343
["color"] = values[tl]["color"] -- ./ldtk/ldtk.can:346
} -- ./ldtk/ldtk.can:346
table["insert"](t["intTiles"], tile) -- ./ldtk/ldtk.can:348
if onAddIntTile then -- ./ldtk/ldtk.can:349
onAddIntTile(tile) -- ./ldtk/ldtk.can:349
end -- ./ldtk/ldtk.can:349
end -- ./ldtk/ldtk.can:349
end -- ./ldtk/ldtk.can:349
end -- ./ldtk/ldtk.can:349
if layer["__type"] == "Entities" then -- ./ldtk/ldtk.can:354
t["entities"] = {} -- ./ldtk/ldtk.can:355
local onAddEntity = callbacks["onAddEntity"] -- ./ldtk/ldtk.can:356
for _, e in ipairs(layer["entityInstances"]) do -- ./ldtk/ldtk.can:357
local entityDef -- ./ldtk/ldtk.can:358
entityDef = level["project"]["_entityData"][e["defUid"]] -- ./ldtk/ldtk.can:358
local entity -- ./ldtk/ldtk.can:366
entity = { -- ./ldtk/ldtk.can:366
["layer"] = t, -- ./ldtk/ldtk.can:369
["identifier"] = e["__identifier"], -- ./ldtk/ldtk.can:372
["x"] = e["px"][1], -- ./ldtk/ldtk.can:375
["y"] = e["px"][2], -- ./ldtk/ldtk.can:378
["width"] = e["width"], -- ./ldtk/ldtk.can:381
["height"] = e["height"], -- ./ldtk/ldtk.can:384
["sx"] = e["width"] / entityDef["width"], -- ./ldtk/ldtk.can:387
["sy"] = e["height"] / entityDef["height"], -- ./ldtk/ldtk.can:390
["pivotX"] = e["__pivot"][1] * e["width"], -- ./ldtk/ldtk.can:393
["pivotY"] = e["__pivot"][2] * e["height"], -- ./ldtk/ldtk.can:396
["color"] = entityDef["color"], -- ./ldtk/ldtk.can:399
["tile"] = nil, -- ./ldtk/ldtk.can:403
["fields"] = getFields(e["fieldInstances"]), -- ./ldtk/ldtk.can:406
["draw"] = function(self) -- ./ldtk/ldtk.can:412
if self["tile"] then -- ./ldtk/ldtk.can:413
local _, _, w, h -- ./ldtk/ldtk.can:414
_, _, w, h = self["tile"]["quad"]:getViewport() -- ./ldtk/ldtk.can:414
lg["setColor"](white) -- ./ldtk/ldtk.can:415
lg["draw"](self["tile"]["tileset"]["image"], self["tile"]["quad"], self["x"] - self["pivotX"], self["y"] - self["pivotY"], 0, self["width"] / w, self["height"] / h) -- ./ldtk/ldtk.can:416
else -- ./ldtk/ldtk.can:416
lg["setColor"](self["color"]) -- ./ldtk/ldtk.can:418
lg["rectangle"]("line", self["x"] - self["pivotX"], self["y"] - self["pivotY"], self["width"], self["height"]) -- ./ldtk/ldtk.can:419
end -- ./ldtk/ldtk.can:419
end -- ./ldtk/ldtk.can:419
} -- ./ldtk/ldtk.can:419
if e["__tile"] then -- ./ldtk/ldtk.can:423
local tileset = cache["tileset"](level["project"]["_tilesetData"][e["__tile"]["tilesetUid"]]) -- ./ldtk/ldtk.can:424
local srcRect = e["__tile"]["srcRect"] -- ./ldtk/ldtk.can:425
local quad = tileset:_newQuad(srcRect[1], srcRect[2], srcRect[3], srcRect[4]) -- ./ldtk/ldtk.can:426
entity["tile"] = { -- ./ldtk/ldtk.can:427
["tileset"] = tileset, -- ./ldtk/ldtk.can:428
["quad"] = quad -- ./ldtk/ldtk.can:429
} -- ./ldtk/ldtk.can:429
end -- ./ldtk/ldtk.can:429
table["insert"](t["entities"], entity) -- ./ldtk/ldtk.can:432
if onAddEntity then -- ./ldtk/ldtk.can:433
onAddEntity(entity) -- ./ldtk/ldtk.can:433
end -- ./ldtk/ldtk.can:433
end -- ./ldtk/ldtk.can:433
end -- ./ldtk/ldtk.can:433
return setmetatable(t, layer_mt) -- ./ldtk/ldtk.can:436
end -- ./ldtk/ldtk.can:436
} -- ./ldtk/ldtk.can:436
layer_mt["__index"] = layer_mt -- ./ldtk/ldtk.can:439
local level_mt -- ./ldtk/ldtk.can:448
level_mt = { -- ./ldtk/ldtk.can:448
["draw"] = function(self, x, y) -- ./ldtk/ldtk.can:459
if x == nil then x = 0 end -- ./ldtk/ldtk.can:459
if y == nil then y = 0 end -- ./ldtk/ldtk.can:459
assert(self["loaded"] == true, "level not loaded") -- ./ldtk/ldtk.can:460
lg["push"]() -- ./ldtk/ldtk.can:461
lg["translate"](x + self["x"], y + self["y"]) -- ./ldtk/ldtk.can:462
self:drawBackground() -- ./ldtk/ldtk.can:463
for _, l in ipairs(self["layers"]) do -- ./ldtk/ldtk.can:465
l:draw() -- ./ldtk/ldtk.can:466
end -- ./ldtk/ldtk.can:466
lg["pop"]() -- ./ldtk/ldtk.can:468
end, -- ./ldtk/ldtk.can:468
["drawBackground"] = function(self, x, y) -- ./ldtk/ldtk.can:479
if x == nil then x = 0 end -- ./ldtk/ldtk.can:479
if y == nil then y = 0 end -- ./ldtk/ldtk.can:479
assert(self["loaded"] == true, "level not loaded") -- ./ldtk/ldtk.can:480
lg["setColor"](self["background"]["color"]) -- ./ldtk/ldtk.can:482
lg["rectangle"]("fill", x, y, self["width"], self["height"]) -- ./ldtk/ldtk.can:483
lg["setColor"](white) -- ./ldtk/ldtk.can:485
local bgImage -- ./ldtk/ldtk.can:486
bgImage = self["background"]["image"] -- ./ldtk/ldtk.can:486
if bgImage then -- ./ldtk/ldtk.can:487
lg["draw"](bgImage["image"], bgImage["quad"], x + bgImage["x"], y + bgImage["y"], 0, bgImage["sx"], bgImage["sy"]) -- ./ldtk/ldtk.can:488
end -- ./ldtk/ldtk.can:488
end, -- ./ldtk/ldtk.can:488
["load"] = function(self, callbacks) -- ./ldtk/ldtk.can:506
if callbacks == nil then callbacks = {} end -- ./ldtk/ldtk.can:506
assert(self["loaded"] == false, "level already loaded") -- ./ldtk/ldtk.can:507
if self["_json"]["bgRelPath"] then -- ./ldtk/ldtk.can:508
local pos -- ./ldtk/ldtk.can:509
pos = self["_json"]["__bgPos"] -- ./ldtk/ldtk.can:509
local cropRect -- ./ldtk/ldtk.can:510
cropRect = pos["cropRect"] -- ./ldtk/ldtk.can:510
local image -- ./ldtk/ldtk.can:511
image = cache["image"](self["project"]["_directory"] .. self["_json"]["bgRelPath"]) -- ./ldtk/ldtk.can:511
self["background"]["image"] = { -- ./ldtk/ldtk.can:512
["image"] = image, -- ./ldtk/ldtk.can:513
["quad"] = newQuad(cropRect[1], cropRect[2], cropRect[3], cropRect[4], image), -- ./ldtk/ldtk.can:514
["x"] = pos["topLeftPx"][1], -- ./ldtk/ldtk.can:515
["y"] = pos["topLeftPx"][2], -- ./ldtk/ldtk.can:516
["sx"] = pos["scale"][1], -- ./ldtk/ldtk.can:517
["sy"] = pos["scale"][1] -- ./ldtk/ldtk.can:518
} -- ./ldtk/ldtk.can:518
end -- ./ldtk/ldtk.can:518
local layerInstances -- ./ldtk/ldtk.can:521
if self["_json"]["externalRelPath"] then -- ./ldtk/ldtk.can:522
layerInstances = readJson(self["project"]["_directory"] .. self["_json"]["externalRelPath"])["layerInstances"] -- ./ldtk/ldtk.can:523
else -- ./ldtk/ldtk.can:523
layerInstances = self["_json"]["layerInstances"] -- ./ldtk/ldtk.can:525
end -- ./ldtk/ldtk.can:525
self["layers"] = {} -- ./ldtk/ldtk.can:527
local onAddLayer -- ./ldtk/ldtk.can:528
onAddLayer = callbacks["onAddLayer"] -- ./ldtk/ldtk.can:528
for i = # layerInstances, 1, - 1 do -- ./ldtk/ldtk.can:529
local layer = layer_mt["_init"](layerInstances[i], self, i, callbacks) -- ./ldtk/ldtk.can:530
table["insert"](self["layers"], layer) -- ./ldtk/ldtk.can:531
if onAddLayer then -- ./ldtk/ldtk.can:532
onAddLayer(layer) -- ./ldtk/ldtk.can:532
end -- ./ldtk/ldtk.can:532
end -- ./ldtk/ldtk.can:532
self["loaded"] = true -- ./ldtk/ldtk.can:534
end, -- ./ldtk/ldtk.can:534
["unload"] = function(self, callbacks) -- ./ldtk/ldtk.can:547
if callbacks == nil then callbacks = {} end -- ./ldtk/ldtk.can:547
assert(self["loaded"] == true, "level not loaded") -- ./ldtk/ldtk.can:548
local onRemoveLayer -- ./ldtk/ldtk.can:549
onRemoveLayer = callbacks["onRemoveLayer"] -- ./ldtk/ldtk.can:549
for _, l in ipairs(self["layers"]) do -- ./ldtk/ldtk.can:550
l:_unloadCallbacks(callbacks) -- ./ldtk/ldtk.can:551
if onRemoveLayer then -- ./ldtk/ldtk.can:552
onRemoveLayer(l) -- ./ldtk/ldtk.can:552
end -- ./ldtk/ldtk.can:552
end -- ./ldtk/ldtk.can:552
self["loaded"] = false -- ./ldtk/ldtk.can:554
self["background"]["image"] = nil -- ./ldtk/ldtk.can:555
self["layers"] = nil -- ./ldtk/ldtk.can:556
end, -- ./ldtk/ldtk.can:556
["_init"] = function(level, project) -- ./ldtk/ldtk.can:559
local t -- ./ldtk/ldtk.can:560
t = { -- ./ldtk/ldtk.can:560
["project"] = project, -- ./ldtk/ldtk.can:563
["loaded"] = false, -- ./ldtk/ldtk.can:566
["identifier"] = level["identifier"], -- ./ldtk/ldtk.can:569
["x"] = level["worldX"], -- ./ldtk/ldtk.can:572
["y"] = level["worldY"], -- ./ldtk/ldtk.can:575
["width"] = level["pxWid"], -- ./ldtk/ldtk.can:578
["height"] = level["pxHei"], -- ./ldtk/ldtk.can:581
["fields"] = getFields(level["fieldInstances"]), -- ./ldtk/ldtk.can:584
["layers"] = nil, -- ./ldtk/ldtk.can:587
["background"] = { -- ./ldtk/ldtk.can:595
["color"] = parseColor(level["__bgColor"]), -- ./ldtk/ldtk.can:596
["image"] = nil -- ./ldtk/ldtk.can:597
}, -- ./ldtk/ldtk.can:597
["_json"] = level -- ./ldtk/ldtk.can:601
} -- ./ldtk/ldtk.can:601
return setmetatable(t, level_mt) -- ./ldtk/ldtk.can:603
end -- ./ldtk/ldtk.can:603
} -- ./ldtk/ldtk.can:603
level_mt["__index"] = level_mt -- ./ldtk/ldtk.can:606
local project_mt -- ./ldtk/ldtk.can:613
project_mt = { ["_init"] = function(project, directory) -- ./ldtk/ldtk.can:614
assert(project["jsonVersion"] == "0.9.3", ("the map was made with LDtk version %s but the importer is made for 0.9.3"):format(project["jsonVersion"])) -- ./ldtk/ldtk.can:615
local t -- ./ldtk/ldtk.can:616
t = { -- ./ldtk/ldtk.can:616
["levels"] = nil, -- ./ldtk/ldtk.can:619
["_directory"] = directory, -- ./ldtk/ldtk.can:622
["_layerDef"] = nil, -- ./ldtk/ldtk.can:623
["_tilesetData"] = nil, -- ./ldtk/ldtk.can:624
["_entityData"] = nil -- ./ldtk/ldtk.can:625
} -- ./ldtk/ldtk.can:625
t["levels"] = (function() -- ./ldtk/ldtk.can:627
local self = {} -- ./ldtk/ldtk.can:627
for _, lvl in ipairs(project["levels"]) do -- ./ldtk/ldtk.can:628
do -- ./ldtk/ldtk.can:629
local __CAN_a = table.pack(level_mt["_init"](lvl, t)) -- ./ldtk/ldtk.can:629
table.move(__CAN_a, 1, __CAN_a.n, #self+1, self) -- ./ldtk/ldtk.can:629
end -- ./ldtk/ldtk.can:629
end -- ./ldtk/ldtk.can:629
return self -- ./ldtk/ldtk.can:629
end)() -- ./ldtk/ldtk.can:629
t["_tilesetData"] = (function() -- ./ldtk/ldtk.can:632
local self = {} -- ./ldtk/ldtk.can:632
for _, ts in ipairs(project["defs"]["tilesets"]) do -- ./ldtk/ldtk.can:633
self[ts["uid"]] = { ["path"] = directory .. ts["relPath"] } -- ./ldtk/ldtk.can:635
local tilesetData = self[ts["uid"]] -- ./ldtk/ldtk.can:637
for gridx = 0, ts["__cWid"] - 1 do -- ./ldtk/ldtk.can:638
for gridy = 0, ts["__cHei"] - 1 do -- ./ldtk/ldtk.can:639
tilesetData[gridx + gridy * ts["__cWid"]] = { -- ./ldtk/ldtk.can:640
["tags"] = {}, -- ./ldtk/ldtk.can:641
["data"] = nil -- ./ldtk/ldtk.can:642
} -- ./ldtk/ldtk.can:642
end -- ./ldtk/ldtk.can:642
end -- ./ldtk/ldtk.can:642
for _, custom in ipairs(ts["customData"]) do -- ./ldtk/ldtk.can:646
tilesetData[custom["tileId"]]["data"] = custom["data"] -- ./ldtk/ldtk.can:647
end -- ./ldtk/ldtk.can:647
for _, tag in ipairs(ts["enumTags"]) do -- ./ldtk/ldtk.can:649
local value = tag["enumValueId"] -- ./ldtk/ldtk.can:650
for _, tileId in ipairs(tag["tileIds"]) do -- ./ldtk/ldtk.can:651
table["insert"](tilesetData[tileId]["tags"], value) -- ./ldtk/ldtk.can:652
tilesetData[tileId]["tags"][value] = true -- ./ldtk/ldtk.can:653
end -- ./ldtk/ldtk.can:653
end -- ./ldtk/ldtk.can:653
end -- ./ldtk/ldtk.can:653
return self -- ./ldtk/ldtk.can:653
end)() -- ./ldtk/ldtk.can:653
t["_layerDef"] = (function() -- ./ldtk/ldtk.can:658
local self = {} -- ./ldtk/ldtk.can:658
for _, lay in ipairs(project["defs"]["layers"]) do -- ./ldtk/ldtk.can:659
self[lay["uid"]] = { ["intGridValues"] = nil } -- ./ldtk/ldtk.can:661
local layerDef = self[lay["uid"]] -- ./ldtk/ldtk.can:663
if lay["__type"] == "IntGrid" then -- ./ldtk/ldtk.can:664
layerDef["intGridValues"] = (function() -- ./ldtk/ldtk.can:665
local self = {} -- ./ldtk/ldtk.can:665
for _, v in ipairs(lay["intGridValues"]) do -- ./ldtk/ldtk.can:666
self[v["value"]] = { -- ./ldtk/ldtk.can:667
["color"] = parseColor(v["color"]), -- ./ldtk/ldtk.can:668
["identifier"] = v["identifier"] -- ./ldtk/ldtk.can:669
} -- ./ldtk/ldtk.can:669
end -- ./ldtk/ldtk.can:669
return self -- ./ldtk/ldtk.can:669
end)() -- ./ldtk/ldtk.can:669
end -- ./ldtk/ldtk.can:669
end -- ./ldtk/ldtk.can:669
return self -- ./ldtk/ldtk.can:669
end)() -- ./ldtk/ldtk.can:669
t["_entityData"] = (function() -- ./ldtk/ldtk.can:676
local self = {} -- ./ldtk/ldtk.can:676
for _, ent in ipairs(project["defs"]["entities"]) do -- ./ldtk/ldtk.can:677
self[ent["uid"]] = { -- ./ldtk/ldtk.can:678
["color"] = parseColor(ent["color"]), -- ./ldtk/ldtk.can:679
["width"] = ent["width"], -- ./ldtk/ldtk.can:680
["height"] = ent["height"] -- ./ldtk/ldtk.can:681
} -- ./ldtk/ldtk.can:681
end -- ./ldtk/ldtk.can:681
return self -- ./ldtk/ldtk.can:681
end)() -- ./ldtk/ldtk.can:681
return setmetatable(t, project_mt) -- ./ldtk/ldtk.can:685
end } -- ./ldtk/ldtk.can:685
project_mt["__index"] = project_mt -- ./ldtk/ldtk.can:688
return function(file) -- ./ldtk/ldtk.can:719
return project_mt["_init"](readJson(file), file:match("^(.-)[^%/%\\]+$")) -- ./ldtk/ldtk.can:720
end -- ./ldtk/ldtk.can:720