From 7735835ca82a3650846040693dde39bf9787e273 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Mon, 21 Sep 2020 11:04:53 +0200 Subject: [PATCH] [exit on start] Level system, for unknown reason the add-in stop on startup --- include/gen_levels.h | 8 ++++++++ include/level.h | 5 +++-- include/main.h | 6 +++--- levels/generate_c.lua | 22 +++++++++++++++++++++- src/gen_levels.c | 34 ++++++++++++++++++++++++++++++++++ src/level.c | 27 ++++++++++++++++++++++++--- src/main.c | 19 +++++++++---------- 7 files changed, 102 insertions(+), 19 deletions(-) create mode 100644 include/gen_levels.h create mode 100644 src/gen_levels.c diff --git a/include/gen_levels.h b/include/gen_levels.h new file mode 100644 index 0000000..6d98eb0 --- /dev/null +++ b/include/gen_levels.h @@ -0,0 +1,8 @@ +#ifndef _DEF_GEN_LEVELS +#define _DEF_GEN_LEVELS + +#include "level.h" + +void level_set(const Level **level, uint level_id); + +#endif /* _DEF_GEN_LEVELS */ diff --git a/include/level.h b/include/level.h index c8986be..9995f3f 100644 --- a/include/level.h +++ b/include/level.h @@ -12,7 +12,8 @@ typedef struct Level const uint8_t **layers; /* points toward the level content */ } Level; -void level_step(Level *level); -void level_draw(Level *level, Camera *camera); +void level_step(const Level *level); +void level_draw(const Level *level, Camera *camera); +void layer_draw(const Level *level, Camera *camera, uint layer_id); #endif /* _DEF_LEVEL */ diff --git a/include/main.h b/include/main.h index ad924d5..708ad03 100644 --- a/include/main.h +++ b/include/main.h @@ -3,8 +3,8 @@ #include "camera.h" #include "input.h" -int play_level(int level_id); +int play_level(uint level_id); /* callback used for UPS control */ int callback(volatile void *arg); -void step_event(Player *player, Level *level, Camera *camera, Input *input, uint step); -void draw_event(Player *player, Level *level, Camera *camera, Input *input, uint step); +void step_event(Player *player, const Level *level, Camera *camera, Input *input, uint step); +void draw_event(Player *player, const Level *level, Camera *camera, Input *input, uint step); diff --git a/levels/generate_c.lua b/levels/generate_c.lua index d5961cb..3ed0740 100755 --- a/levels/generate_c.lua +++ b/levels/generate_c.lua @@ -1,5 +1,10 @@ #!/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 @@ -54,9 +59,24 @@ local function create_structure_c(id) 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 = layers_", id, "\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) diff --git a/src/gen_levels.c b/src/gen_levels.c new file mode 100644 index 0000000..6694406 --- /dev/null +++ b/src/gen_levels.c @@ -0,0 +1,34 @@ +#include "level.h" +const uint8_t tiles_0_1[] = { + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 1, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, +}; +const uint8_t tiles_0_2[] = { + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 1, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, +}; +const uint8_t *layers_0[] = {tiles_0_1, tiles_0_2, }; +const Level level_0 = { + .width = 10, + .height = 51, + .layers = layers_0 +}; +void level_set(const Level **level, uint level_id) +{ + switch(level_id) + { + case 0: *level = &level_0; break; + } +} diff --git a/src/level.c b/src/level.c index ac57417..c4ae800 100644 --- a/src/level.c +++ b/src/level.c @@ -1,11 +1,32 @@ +#include + #include "level.h" #include "camera.h" -void level_step(Level *level) +void level_step(const Level *level) { } -void level_draw(Level *level, Camera *camera) +void level_draw(const Level *level, Camera *camera) { - /* TODO */ + layer_draw(level, camera, 0); +} + +void layer_draw(const Level *level, Camera *camera, uint layer_id) +{ + return; + const uint8_t *layer = level->layers[layer_id]; + for (int y = 0; y < level->width; ++y) + { + for (int x = 0; x < level->height; ++x) + { + const uint8_t cell = layer[x + y * level->width]; + #ifdef FX9860G + dpixel(x, y, (cell == 100) ? C_LIGHT : C_BLACK); + #endif /* FX9860G */ + #ifdef FXCG50 + dpixel(x, y, (cell == 100) ? C_RED : C_BLACK); + #endif /* FXCG50 */ + } + } } diff --git a/src/main.c b/src/main.c index 96e2824..35716ac 100644 --- a/src/main.c +++ b/src/main.c @@ -14,6 +14,7 @@ #include "level.h" #include "camera.h" #include "input.h" +#include "gen_levels.h" int main(void) { @@ -26,7 +27,7 @@ int main(void) return 1; } -int play_level(int level_id) +int play_level(uint level_id) { /* create player */ Player player = { @@ -35,11 +36,9 @@ int play_level(int level_id) .origin = {4 * VEC_PRECISION, 4 * VEC_PRECISION} }; - /* create level */ - Level level = { - .width = 0, - .height = 0 - }; + /* set level */ + const Level *level; + level_set(&level, level_id); /* create camera */ Camera camera = { @@ -72,10 +71,10 @@ int play_level(int level_id) has_ticked = 0; /* step event is where all the logic happens */ step += 1; - step_event(&player, &level, &camera, &input, step); + step_event(&player, level, &camera, &input, step); } /* draw event just draws stuff */ - draw_event(&player, &level, &camera, &input, step); + draw_event(&player, level, &camera, &input, step); } return 1; } @@ -87,7 +86,7 @@ int callback(volatile void *arg) return 0; } -void step_event(Player *player, Level *level, Camera *camera, Input *input, uint step) +void step_event(Player *player, const Level *level, Camera *camera, Input *input, uint step) { //getkey(); input_step(input); @@ -96,7 +95,7 @@ void step_event(Player *player, Level *level, Camera *camera, Input *input, uint camera_step(camera); } -void draw_event(Player *player, Level *level, Camera *camera, Input *input, uint step) +void draw_event(Player *player, const Level *level, Camera *camera, Input *input, uint step) { dclear(C_WHITE); level_draw(level, camera);