[exit on start] Level system, for unknown reason the add-in stop on

startup
This commit is contained in:
KikooDX 2020-09-21 11:04:53 +02:00
parent a40d42584c
commit 7735835ca8
7 changed files with 102 additions and 19 deletions

8
include/gen_levels.h Normal file
View File

@ -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 */

View File

@ -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 */

View File

@ -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);

View File

@ -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)

34
src/gen_levels.c Normal file
View File

@ -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;
}
}

View File

@ -1,11 +1,32 @@
#include <gint/display.h>
#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 */
}
}
}

View File

@ -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);