fix header and height for generator level1
This commit is contained in:
parent
19caa845de
commit
f8a0544b87
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue