basic level display blblblblbl

This commit is contained in:
Yann MAGNIN 2022-08-20 15:06:19 +02:00
parent e8a624a9e9
commit 0abeeaa835
4 changed files with 90 additions and 7 deletions

View File

@ -10,7 +10,8 @@ find_package(LibProf 2.1 REQUIRED)
set(SOURCES
src/main.cpp
src/generator.cpp)
src/generator.cpp
src/level.cpp)
set(ASSETS)
fxconv_declare_assets(${ASSETS} WITH_METADATA)

View File

@ -2,6 +2,7 @@
# define __BOSONX__
#include <vector>
#include <memory>
#ifndef PLATFORM_COUNT
# define PLATFORM_COUNT 10
@ -25,12 +26,9 @@ struct section {
//...
};
typedef struct level {
std::vector<struct section> section_buffer;
// ...
} level_t ;
struct level;
typedef struct level level_t;
struct generator
{
@ -48,4 +46,16 @@ struct gen1 : public generator
};
struct level {
std::vector<struct section> section_buffer;
std::unique_ptr<struct generator> gen;
};
extern void level_update(level_t *level);
extern level_t level_create(int level);
extern void level_display(level_t *level);
extern void level_advance(level_t *level);
#endif /* __BOSONX__ */

45
src/level.cpp Normal file
View File

@ -0,0 +1,45 @@
#include "bosonx.h"
#include <gint/display.h>
level_t level_create(int level)
{
level_t l;
switch(level) {
default:
l.gen = std::make_unique<struct gen1>();
}
return l;
}
void level_update(level_t *level)
{
while (level->section_buffer.size() < 5) {
level->gen->generate(level);
}
}
void level_advance(level_t *level)
{
level->section_buffer.erase(level->section_buffer.begin());
}
void level_display(level_t *level)
{
int w;
int h;
int sx;
int sy;
dsize("@", NULL, &w, &h);
sx = (DWIDTH - (PLATFORM_COUNT * w)) / 2;
sy = (DHEIGHT - (PLATFORM_COUNT * h)) / 2;
for (int i = 4; i >= 0; --i) {
for (int j = 0; j < PLATFORM_COUNT; ++j) {
if (level->section_buffer[i].platforms[j].type != PLATFORM_EMPTY)
dtext(sx + (w * j), sy + (h * i), C_BLACK, "@");
}
}
}

View File

@ -1,10 +1,36 @@
#include "bosonx.h"
#include <gint/keyboard.h>
#include <gint/display.h>
int main(void)
{
level_t level = level_create(1);
while (1) {
level_update(&level);
//TODO: display
dclear(C_WHITE);
level_display(&level);
dupdate();
clearevents();
if(keydown(KEY_EXIT) || keydown(KEY_MENU)) break;
if(keydown(KEY_EXE)) {
level_advance(&level);
}
}
return 0;
}
#if 0
#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/timer.h>
#include <azur/gint/render.h>
#include <gint/drivers/r61524.h>
#include <math.h>
int main(void)
{
azrp_config_scale(1);
@ -45,3 +71,4 @@ int main(void)
timer_stop(timer);
return 1;
}
#endif