From f8a0544b87ed6a9e8beeea93cf76baccf5e4e039 Mon Sep 17 00:00:00 2001 From: Yann MAGNIN Date: Wed, 24 May 2023 18:42:51 +0200 Subject: [PATCH] fix header and height for generator level1 --- src/generator.h | 77 +++++++++++++++++++++--------------------- src/generator/gen1.cpp | 20 +++++++++-- src/generator/path.cpp | 1 + 3 files changed, 58 insertions(+), 40 deletions(-) diff --git a/src/generator.h b/src/generator.h index 1184eaf..7a61cd7 100644 --- a/src/generator.h +++ b/src/generator.h @@ -11,79 +11,80 @@ using namespace libnum; produces a random traversable path. */ struct path_carver { - /* Start a path on the provided face. */ - path_carver(int initial_face); - /* Advance by one platform of the specified length and generate the - associated platform data. A platform might not be generated if the path - decides to skip for a jump! Returns true if a platform was generated in - *p, false otherwise (in that case don't use *p). If force is set, always - generates a platform. */ - bool next(num length, struct platform *p, bool force=false); - /* Teleport to the specified z. */ - void teleport(num z); + /* Start a path on the provided face. */ + path_carver(int initial_face); + /* Advance by one platform of the specified length and generate the + associated platform data. A platform might not be generated if the path + decides to skip for a jump! Returns true if a platform was generated in + *p, false otherwise (in that case don't use *p). If force is set, always + generates a platform. */ + bool next(num length, struct platform *p, bool force=false); + /* Teleport to the specified z. */ + void teleport(num z); private: - /* Face where the next platform will be generated */ - int m_face; - /* Current z position */ - num m_z; - /* Whether last face was skipped */ - bool m_last_skipped; + /* Face where the next platform will be generated */ + int m_face; + /* Current z position */ + num m_z; + /* Whether last face was skipped */ + bool m_last_skipped; }; static inline int add_to_face(int face, int how_much) { - int f = (face + how_much) % PLATFORM_COUNT; - return (f < 0) ? f + PLATFORM_COUNT : f; + int f = (face + how_much) % PLATFORM_COUNT; + return (f < 0) ? f + PLATFORM_COUNT : f; } static inline int next_face(int face) { - return add_to_face(face, 1); + return add_to_face(face, 1); } static inline int prev_face(int face) { - return add_to_face(face, -1); + return add_to_face(face, -1); } //======= Level generator API =======// struct Generator { - /* Generate more stuff. */ - virtual void generate(struct level *) = 0; - virtual ~Generator() = default; + /* Generate more stuff. */ + virtual void generate(struct level *) = 0; + virtual ~Generator() = default; }; struct gen1: public Generator { - gen1(); - void generate(struct level *) override; - ~gen1() override = default; + gen1(); + void generate(struct level *) override; + ~gen1() override = default; - num m_last_z; - path_carver m_path_carvers[3]; + num m_z; + bool m_initial; + path_carver m_path_carver; }; struct AcceleronGenerator: public Generator { - AcceleronGenerator(); - void generate(struct level *) override; - ~AcceleronGenerator() override = default; + AcceleronGenerator(); + void generate(struct level *) override; + ~AcceleronGenerator() override = default; - num m_z; - bool m_initial; - path_carver m_path_carver; + num m_z; + bool m_initial; + path_carver m_path_carver; }; struct gen3: public Generator { - gen3(); - void generate(struct level *) override; - ~gen3() override = default; + gen3(); + void generate(struct level *) override; + ~gen3() override = default; - path_carver m_path_carvers[3]; + path_carver m_path_carvers[3]; }; #endif /* GENERATOR_H */ diff --git a/src/generator/gen1.cpp b/src/generator/gen1.cpp index 0733eac..b33d3a5 100644 --- a/src/generator/gen1.cpp +++ b/src/generator/gen1.cpp @@ -1,12 +1,13 @@ #include "../generator.h" #include "../level.h" -#define N PLATFORM_COUNT +#define PLATFORM_LEN_INITIAL num(6.0) gen1::gen1(): m_path_carver{0} { - m_last_z = 0; srand(0xc0ffee); + m_initial = true; + m_z = 0.0; } void gen1::generate(struct level *level) @@ -21,6 +22,20 @@ void gen1::generate(struct level *level) 5, 5, 5, }; + /* Friendly platform at start of level */ + if(m_initial) { + struct platform p; + p.type = PLATFORM_WHITE; + p.face = 0; + p.z = m_z; + p.length = PLATFORM_LEN_INITIAL; + p.height = 0; + + level->platform_buffer.push_back(p); + m_z += p.length; + m_initial = false; + } + m_path_carver.next( (rand() % 2) ? PLATFORM_LEN_LONG : PLATFORM_LEN_SHORT, &p1, @@ -79,6 +94,7 @@ void gen1::generate(struct level *level) /* foce 1 face */ default: + p1.length = PLATFORM_LEN_LONG; level->platform_buffer.push_back(p1); } } diff --git a/src/generator/path.cpp b/src/generator/path.cpp index 4280a68..773373c 100644 --- a/src/generator/path.cpp +++ b/src/generator/path.cpp @@ -22,6 +22,7 @@ bool path_carver::next(num length, struct platform *p, bool force) p->z = m_z; p->length = length; p->type = PLATFORM_WHITE; + p->height = 0; int diff = rand() % 3 - 1; m_face = (m_face + PLATFORM_COUNT + diff) % PLATFORM_COUNT;