#ifndef __LEVEL_H__ # define __LEVEL_H__ #include "settings.h" #include #include typedef enum { PLATFORM_EMPTY, PLATFORM_WHITE, PLATFORM_RED, PLATFORM_BLUE, PLATFORM_SEPARATING_WALL, PLATFORM_BLOCK, PLATFORM_BLOCK_TOP, } platform_type_t; struct platform { /* Face number along the level's cylinder */ int face; /* Depth and length; the platform lies at [z ... z+length). */ num z; num length; /* Platform height above the default height (cylinder quasiradius). This can be compared with player->height. */ num height; /* Platform kind. */ platform_type_t type; /* Whether the platform is currently falling. This is only used for red platforms. */ bool falling; /* Whether the SEPARATING_WALL platform is seen from the left side and/or seen from the right side. */ bool wall_left_sided; bool wall_right_sided; }; struct Generator; struct level { char const *name; std::vector platform_buffer; std::unique_ptr gen; uint16_t bgcolor; }; extern void level_update(struct level *level, num z, int reference_face); extern struct level level_create(int level); #endif /* __LEVEL_H__ */