From a310ffb5a6a7c67df3a46b566a3f865cfa7d9ffd Mon Sep 17 00:00:00 2001 From: KikooDX Date: Wed, 13 Jan 2021 14:23:07 +0100 Subject: [PATCH] Start position object. --- build_levels.lua | 39 ++++++++++++++++++++++++++++++++++++--- level_1.tmx | 10 ++++++---- objecttypes.xml | 4 ++++ 3 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 objecttypes.xml diff --git a/build_levels.lua b/build_levels.lua index 1096f7b..81b11e4 100644 --- a/build_levels.lua +++ b/build_levels.lua @@ -1,7 +1,9 @@ local function write_header() io.write('#include \n') + io.write('#include "conf.h"\n') io.write('#include "level.h"\n') io.write('#include "tiles.h"\n') + io.write('#include "vec.h"\n') end local function load_level(level_id) @@ -21,6 +23,30 @@ local function write_layer(layer, level_id) io.write("};\n") end +local function count_tile_layers(level) + local count = 0 + for _, layer in ipairs(level.layers) do + if layer.type == "tilelayer" then + count = count + 1 + end + end + return count +end + +local function find_start_pos(level) + for _, layer in ipairs(level.layers) do + if layer.type == "objectgroup" then + for _, object in ipairs(layer.objects) do + if object.visible and object.type == "start_pos" then + return { x = object.x / level.tilewidth, + y = object.y / level.tileheight } + end + end + end + end + return { x = 1, y = 1 } +end + local function write_level(level, level_id) solid_layer = 1 bg_color = level.backgroundcolor or { 255, 255, 255 } @@ -32,17 +58,24 @@ local function write_level(level, level_id) if layer.name == "solid" then solid_layer = i end - write_layer(layer, level_id) + if layer.type == "tilelayer" then + write_layer(layer, level_id) + end end io.write("const Tile *layers_", level_id, "[] = {") for i, layer in ipairs(level.layers) do - io.write("tiles_", level_id, "_", layer.name, ",") + if layer.type == "tilelayer" then + io.write("tiles_", level_id, "_", layer.name, ",") + end 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") + local start_pos = find_start_pos(level) + io.write("\t.start_pos = { ", start_pos.x, " * TILE_SIZE, ", + start_pos.y, " * TILE_SIZE },\n") io.write("\t#ifdef FXCG50\n") io.write("\t.bg_color = C_RGB(", bg_color[1], ", ", bg_color[2], ", ", bg_color[3], "),\n") @@ -50,7 +83,7 @@ local function write_level(level, level_id) 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.layers_count = ", count_tile_layers(level), ",\n") io.write("\t.solid_layer = ", solid_layer - 1, "\n") io.write("};\n") end diff --git a/level_1.tmx b/level_1.tmx index c179bef..6a456ba 100644 --- a/level_1.tmx +++ b/level_1.tmx @@ -1,13 +1,10 @@ - + - - - 227,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,227,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,227, 228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226, @@ -75,4 +72,9 @@ 227,227,227,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,227 + + + + + diff --git a/objecttypes.xml b/objecttypes.xml new file mode 100644 index 0000000..16f1e02 --- /dev/null +++ b/objecttypes.xml @@ -0,0 +1,4 @@ + + + +