implement obstracles callbacks

This commit is contained in:
Sebastian Krzyszkowiak 2012-05-03 02:19:55 +02:00
parent d4c5028216
commit b6d8136609
2 changed files with 28 additions and 8 deletions

View file

@ -72,6 +72,20 @@ bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state)
return true;
}
void Obst_MoveUpDown(struct Game *game, struct Obstracle *obstracle) {
if (obstracle->data) {
obstracle->y -= 0.5;
if (obstracle->y<=0) {
obstracle->data=NULL;
}
} else {
obstracle->y += 0.5;
if (obstracle->y>=100) {
obstracle->data++;
}
}
}
bool GenerateObstracles(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
/*float* tmp; bool* in;*/
int* count;
@ -98,6 +112,8 @@ bool GenerateObstracles(struct Game *game, struct TM_Action *action, enum TM_Act
obst->speed = 0;
obst->bitmap = game->level.obst_bmps.pie;
obst->callback = NULL;
obst->data = NULL;
if (rand()%100<=50) obst->callback=Obst_MoveUpDown;
if (game->level.obstracles) {
game->level.obstracles->prev = obst;
obst->next = game->level.obstracles;
@ -172,8 +188,9 @@ void Level_Draw(struct Game *game) {
if (tmp->x > -10) {
al_draw_bitmap(tmp->bitmap, (tmp->x/100.0)*al_get_display_width(game->display), (tmp->y/100.0)*al_get_display_height(game->display), 0);
tmp->x -= game->level.speed*310;
if (tmp->callback) tmp->callback(game, tmp);
} else {
/* Delete from queue... */
/* TODO: Delete from queue... */
}
tmp = tmp->next;
}

View file

@ -50,13 +50,7 @@ struct Moonwalk {
double derpy_pos; /*!< Position of Derpy on screen. */
};
struct Obstracle {
ALLEGRO_BITMAP *bitmap;
float x, y, speed;
int points;
void *callback;
struct Obstracle *prev, *next;
};
struct Obstracle;
/*! \brief Resources used by Level state. */
struct Level {
@ -223,6 +217,15 @@ struct Game {
} audio;
};
struct Obstracle {
ALLEGRO_BITMAP *bitmap;
float x, y, speed;
int points;
void (*callback)(struct Game*, struct Obstracle*);
void *data;
struct Obstracle *prev, *next;
};
/*! \brief Draws text with shadow.
*
* Draws given text two times: once with color (0,0,0,128) and 1px off in both x and y axis,