From 0abeeaa835614b1877d8ad1c90f62bef77c99ccf Mon Sep 17 00:00:00 2001 From: Yann MAGNIN Date: Sat, 20 Aug 2022 15:06:19 +0200 Subject: [PATCH] basic level display blblblblbl --- CMakeLists.txt | 3 ++- src/bosonx.h | 20 +++++++++++++++----- src/level.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 29 ++++++++++++++++++++++++++++- 4 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 src/level.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a9ab0f..6bf9714 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/src/bosonx.h b/src/bosonx.h index eaeef0a..0090c21 100644 --- a/src/bosonx.h +++ b/src/bosonx.h @@ -2,6 +2,7 @@ # define __BOSONX__ #include +#include #ifndef PLATFORM_COUNT # define PLATFORM_COUNT 10 @@ -25,12 +26,9 @@ struct section { //... }; -typedef struct level { - std::vector 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 section_buffer; + std::unique_ptr 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__ */ diff --git a/src/level.cpp b/src/level.cpp new file mode 100644 index 0000000..783af92 --- /dev/null +++ b/src/level.cpp @@ -0,0 +1,45 @@ +#include "bosonx.h" +#include + +level_t level_create(int level) +{ + level_t l; + + switch(level) { + default: + l.gen = std::make_unique(); + } + 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, "@"); + } + } +} diff --git a/src/main.cpp b/src/main.cpp index 2d997b9..aec8991 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,10 +1,36 @@ +#include "bosonx.h" +#include +#include + +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 #include #include #include #include #include - int main(void) { azrp_config_scale(1); @@ -45,3 +71,4 @@ int main(void) timer_stop(timer); return 1; } +#endif