61 lines
1.6 KiB
Lua
61 lines
1.6 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
|
|
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)
|