jtmm2-levels/build_levels.lua

58 lines
1.5 KiB
Lua

local function write_header()
io.write('#include "level.h"\n')
io.write('#include "tiles.h"\n')
end
local function load_level(level_id)
local level = require("level_" .. level_id)
return level
end
local function write_layer(layer, level_id)
local data = layer.data
io.write("const Tile tiles_", level_id, "_", layer.name, "[] = {\n")
for _, v in ipairs(data) do
io.write(v - 1, ",")
end
io.write("};\n")
end
local function write_level(level, level_id)
solid_layer = -1
-- write every layer
for i, layer in ipairs(level.layers) do
if layer.name == "solid" then
solid_layer = i
end
write_layer(layer, level_id)
end
io.write("const Tile *layers_", level_id, "[] = {")
for i, layer in ipairs(level.layers) do
io.write("tiles_", level_id, "_", layer.name, ",")
end
io.write("};\n")
-- create level struct
io.write("const Level level_", level_id, " = {\n")
io.write("\t.width = ", level.width, ",\n")
io.write("\t.height = ", level.height, ",\n")
io.write("\t.layers = layers_", level_id, ",\n")
io.write("\t.layers_count = ", #level.layers, ",\n")
io.write("\t.solid_layer = ", solid_layer - 1, "\n")
io.write("};\n")
end
local function write_function(first_level, last_level)
io.write("void level_set(const Level **level, uint level_id) {\n")
io.write("\tswitch(level_id) {\n")
for i = first_level, last_level, 1 do
io.write("\t\tcase ", i, ": *level = &level_", i, "; break;\n")
end
io.write("\t}\n")
io.write("}\n")
end
write_header()
local level_id = 1
write_level(load_level(level_id), level_id)
write_function(1, 1)