72 lines
1.9 KiB
Lua
72 lines
1.9 KiB
Lua
local function write_header()
|
|
io.write('#include <gint/display.h>\n')
|
|
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
|
|
bg_color = level.backgroundcolor or { 255, 255, 255 }
|
|
for i, v in ipairs(bg_color) do
|
|
bg_color[i] = math.floor(v / 8)
|
|
end
|
|
-- 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#ifdef FXCG50\n")
|
|
io.write("\t.bg_color = C_RGB(", bg_color[1], ", ",
|
|
bg_color[2], ", ", bg_color[3], "),\n")
|
|
io.write("\t#else\n")
|
|
io.write("\t.bg_color = C_WHITE,\n")
|
|
io.write("\t#endif\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)
|