Spikes! Well chains. Whatever.

This commit is contained in:
KikooDX 2021-01-08 19:03:58 +01:00
parent 19a989d706
commit c0633f4346
6 changed files with 23 additions and 5 deletions

View File

@ -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);

View File

@ -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"

View File

@ -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 {

View File

@ -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) {

View File

@ -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) {

View File

@ -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: