#!/usr/bin/env luajit local function create_includes_c() io.write[[#include "level.h" ]] end local function read_level(id) local file = io.open(id..".jtmm2") if not file then return nil else local content = {width = nil, height = nil, layers = {{}}} local line_nb = 0 local layer_nb = 1 for line in file:lines() do line_nb = line_nb + 1 if line_nb < 3 then if content.width then content.height = tonumber(line) else content.width = tonumber(line) end else if line == "n" then layer_nb = layer_nb + 1 table.insert(content.layers, {}) else table.insert(content.layers[layer_nb], line) end end end file:close() return content end end local function create_structure_c(id) local content = read_level(id) if content then -- layers for i, layer in ipairs(content.layers) do io.write("const uint8_t tiles_", id, "_", i, "[] = {\n\t") for i, v in ipairs(layer) do io.write(v, ", ") if i % 14 == 0 and i ~= #layer then io.write("\n\t") end end io.write("\n};\n"); end -- array io.write("const uint8_t *layers_", id, "[] = {") for i = 1, #content.layers, 1 do io.write("tiles_", id, "_", i, ", ") end io.write("};\n") -- structure io.write("const Level level_", id, " = {\n") io.write("\t.width = ", content.width, ",\n") io.write("\t.height = ", content.height, ",\n") io.write("\t.layers = layers_", id, ",\n") io.write("\t.layers_count = ", #content.layers, ",\n") io.write("\t.solid_layer = 0\n") io.write("};\n") end end local function create_function_c(max) io.write("void level_set(const Level **level, uint level_id)\n") io.write("{\n") io.write("\tswitch(level_id)\n") io.write("\t{\n") io.write() for i = 0, max, 1 do io.write("\t\tcase ", i, ": ") io.write("*level = &level_", i, "; break;\n") end io.write("\t}\n}\n") end create_includes_c() create_structure_c(0) create_function_c(0)