Spikes! Well chains. Whatever.
This commit is contained in:
parent
19a989d706
commit
c0633f4346
|
@ -3,6 +3,7 @@
|
|||
#include "camera.h"
|
||||
#include "input.h"
|
||||
|
||||
/* returns true if player died */
|
||||
int play_level(uint level_id);
|
||||
/* callback used for UPS control */
|
||||
int callback(volatile void *arg);
|
||||
|
|
|
@ -13,6 +13,7 @@ typedef struct Player {
|
|||
Vec origin; /* the origin of the sprite (offset) */
|
||||
uint grace; /* coyot jump */
|
||||
bool jump_held; /* used to control jump height */
|
||||
bool dead; /* set to true the player will die */
|
||||
} Player;
|
||||
|
||||
#include "level.h"
|
||||
|
|
|
@ -9,10 +9,12 @@ typedef unsigned char Tile_flags; /* the tile properties (bitmask) */
|
|||
/* define flags */
|
||||
#define F_SOLID 0b1
|
||||
#define F_SLIPPERY 0b10
|
||||
#define F_SPIKY 0b100
|
||||
|
||||
/* define properties */
|
||||
#define P_AIR (0)
|
||||
#define P_BASE (F_SOLID)
|
||||
#define P_SPIKE (F_SPIKY)
|
||||
#define P_UNKNOWN (0)
|
||||
|
||||
enum {
|
||||
|
|
16
src/main.c
16
src/main.c
|
@ -20,7 +20,7 @@ int main(void) {
|
|||
init(); /* initialize gint */
|
||||
|
||||
/* main game loop */
|
||||
play_level(1);
|
||||
while (play_level(1)) {};
|
||||
|
||||
/* return to menu */
|
||||
return 1;
|
||||
|
@ -35,7 +35,8 @@ int play_level(uint level_id) {
|
|||
.vbox = {7, 7},
|
||||
.origin = {0 * VEC_PRECISION, 0 * VEC_PRECISION},
|
||||
.grace = 0,
|
||||
.jump_held = false
|
||||
.jump_held = false,
|
||||
.dead = false
|
||||
};
|
||||
|
||||
/* set level */
|
||||
|
@ -56,7 +57,8 @@ int play_level(uint level_id) {
|
|||
|
||||
/* UPS control */
|
||||
volatile int has_ticked = 1;
|
||||
timer_start(timer_setup(TIMER_ANY, 1000000/UPS, callback, &has_ticked));
|
||||
int timer = timer_setup(TIMER_ANY, 1000000/UPS, callback, &has_ticked);
|
||||
timer_start(timer);
|
||||
|
||||
uint step = 0;
|
||||
|
||||
|
@ -69,11 +71,17 @@ int play_level(uint level_id) {
|
|||
/* step event is where all the logic happens */
|
||||
step += 1;
|
||||
step_event(&player, level, &camera, &input, step);
|
||||
/* player death check */
|
||||
if(player.dead) {
|
||||
timer_stop(timer);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
/* draw event just draws stuff */
|
||||
draw_event(&player, level, &camera, &input, step);
|
||||
}
|
||||
return 1;
|
||||
timer_stop(timer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int callback(volatile void *arg) {
|
||||
|
|
|
@ -109,6 +109,10 @@ void player_step(Player *player, Input *input, const Level *level, uint step) {
|
|||
player->jump_held = false;
|
||||
}
|
||||
player_move(player, level); /* move the player according to their speed */
|
||||
/* player death */
|
||||
if (player_collide_or(player, player->pos, level) & F_SPIKY) {
|
||||
player->dead = true;
|
||||
}
|
||||
}
|
||||
|
||||
void player_draw(Player *player, Camera *camera) {
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
Tile_flags tile_get_flags(Tile tile) {
|
||||
switch (tile) {
|
||||
case ID_AIR:
|
||||
case ID_CHAIN:
|
||||
return P_AIR;
|
||||
break;
|
||||
case ID_CHAIN:
|
||||
return P_SPIKE;
|
||||
break;
|
||||
case ID_BASE_0:
|
||||
case ID_BASE_1:
|
||||
case ID_BASE_2:
|
||||
|
|
Reference in New Issue