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 if v ~= 0 then v = v - 1 end io.write(v, ",") 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)