mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 11:06:44 +01:00
some work on levels
This commit is contained in:
parent
a5e0be5434
commit
07ac5294d5
3 changed files with 73 additions and 6 deletions
70
src/level.c
70
src/level.c
|
@ -72,6 +72,48 @@ bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GenerateObstracles(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
/*float* tmp; bool* in;*/
|
||||
int* count;
|
||||
if (!action->arguments) {
|
||||
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(int)));
|
||||
/* action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(bool))); */
|
||||
}
|
||||
count = (int*)action->arguments->value;
|
||||
/*tmp = (float*)action->arguments->value;
|
||||
in = (bool*)action->arguments->next->value;*/
|
||||
if (state == TM_ACTIONSTATE_INIT) {
|
||||
*count = 0;
|
||||
/* *tmp = 0;
|
||||
*in = true;*/
|
||||
}
|
||||
else if (state == TM_ACTIONSTATE_RUNNING) {
|
||||
if (rand()%100<=2) {
|
||||
PrintConsole(game, "OBSTRACLE %d", *count);
|
||||
(*count)++;
|
||||
struct Obstracle *obst = malloc(sizeof(struct Obstracle));
|
||||
obst->prev = NULL;
|
||||
obst->x = 100;
|
||||
obst->y = (rand()%91)-1;
|
||||
obst->speed = 0;
|
||||
obst->bitmap = game->level.obst_bmps.pie;
|
||||
obst->callback = NULL;
|
||||
if (game->level.obstracles) {
|
||||
game->level.obstracles->prev = obst;
|
||||
obst->next = game->level.obstracles;
|
||||
} else {
|
||||
obst->next = NULL;
|
||||
}
|
||||
game->level.obstracles = obst;
|
||||
if (*count > 64) return true;
|
||||
}
|
||||
} else {
|
||||
free(action->arguments->value);
|
||||
TM_DestroyArgs(action->arguments);
|
||||
action->arguments = NULL;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Stop(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||
|
@ -124,6 +166,18 @@ void Level_Draw(struct Game *game) {
|
|||
al_draw_bitmap(game->level.stage, (-game->level.st_pos)*al_get_bitmap_width(game->level.stage), 0 ,0);
|
||||
al_draw_bitmap(game->level.stage, (1+(-game->level.st_pos))*al_get_bitmap_width(game->level.stage), 0 ,0);
|
||||
|
||||
struct Obstracle *tmp = game->level.obstracles;
|
||||
while (tmp) {
|
||||
/*PrintConsole(game, "DRAWING %f %f", tmp->x, tmp->y);*/
|
||||
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;
|
||||
} else {
|
||||
/* Delete from queue... */
|
||||
}
|
||||
tmp = tmp->next;
|
||||
}
|
||||
|
||||
al_set_target_bitmap(game->level.derpy);
|
||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||
al_draw_bitmap_region(game->level.derpy_walkcycle,al_get_bitmap_width(game->level.derpy)*(game->level.sheet_pos%game->level.sheet_cols),al_get_bitmap_height(game->level.derpy)*(game->level.sheet_pos/game->level.sheet_cols),al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy),0,0,0);
|
||||
|
@ -270,6 +324,7 @@ void Level_Load(struct Game *game) {
|
|||
game->level.sheet_speed = 2.4;
|
||||
game->level.sheet_tmp = 0;
|
||||
game->level.handle_input = false;
|
||||
game->level.obstracles = NULL;
|
||||
al_clear_to_color(al_map_rgb(0,0,0));
|
||||
if (game->level.current_level!=1) Moonwalk_Load(game);
|
||||
else {
|
||||
|
@ -286,7 +341,7 @@ void Level_Load(struct Game *game) {
|
|||
TM_AddDelay(500);
|
||||
TM_AddQueuedBackgroundAction(&Accelerate, NULL, 0, "accelerate");
|
||||
TM_AddAction(&Fly, NULL, "fly");
|
||||
|
||||
TM_AddDelay(5*1000);
|
||||
/* first part gameplay goes here */
|
||||
|
||||
/* actions for generating obstracles should go here
|
||||
|
@ -294,8 +349,8 @@ void Level_Load(struct Game *game) {
|
|||
* begins. After last one part with muffins starts.
|
||||
* Should obstracles themselves be handled as objects
|
||||
* on timeline? (probably not). Hmm... */
|
||||
|
||||
TM_AddDelay(60*1000);
|
||||
TM_AddAction(&GenerateObstracles, NULL, "obstracles");
|
||||
TM_AddDelay(5*1000);
|
||||
|
||||
/*
|
||||
// wings disappear, deccelerate, fall down
|
||||
|
@ -357,6 +412,13 @@ void Level_Unload(struct Game *game) {
|
|||
else {
|
||||
TM_Destroy();
|
||||
}
|
||||
struct Obstracle *tmp, *t = game->level.obstracles;
|
||||
if (t) tmp = t->prev;
|
||||
while (t) {
|
||||
if (tmp) free(tmp);
|
||||
tmp = t;
|
||||
t = t->next;
|
||||
}
|
||||
Level_UnloadBitmaps(game);
|
||||
}
|
||||
|
||||
|
@ -370,6 +432,7 @@ void Level_UnloadBitmaps(struct Game *game) {
|
|||
al_destroy_bitmap(game->level.stage);
|
||||
al_destroy_bitmap(game->level.clouds);
|
||||
al_destroy_bitmap(game->level.welcome);
|
||||
al_destroy_bitmap(game->level.obst_bmps.pie);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,6 +446,7 @@ void Level_PreloadBitmaps(struct Game *game) {
|
|||
game->level.foreground = LoadScaledBitmap("levels/1/foreground.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display));
|
||||
game->level.background = LoadScaledBitmap("levels/1/background.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display));
|
||||
game->level.stage = LoadScaledBitmap("levels/1/stage.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display));
|
||||
game->level.obst_bmps.pie = LoadScaledBitmap("menu/pie.png", al_get_display_width(game->display)*0.1, al_get_display_height(game->display)*0.1);
|
||||
game->level.welcome = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
||||
al_set_target_bitmap(game->level.welcome);
|
||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||
|
|
|
@ -74,6 +74,9 @@ struct Level {
|
|||
ALLEGRO_BITMAP *welcome;
|
||||
ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */
|
||||
ALLEGRO_BITMAP *derpy; /*!< Derpy sprite. */
|
||||
struct {
|
||||
ALLEGRO_BITMAP *pie;
|
||||
} obst_bmps;
|
||||
struct Obstracle *obstracles;
|
||||
struct Moonwalk moonwalk;
|
||||
};
|
||||
|
|
|
@ -51,7 +51,7 @@ void Moonwalk_Draw(struct Game *game) {
|
|||
}
|
||||
}
|
||||
al_draw_scaled_bitmap(game->level.moonwalk.image,0,0,al_get_bitmap_width(game->level.moonwalk.image),al_get_bitmap_height(game->level.moonwalk.image),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
|
||||
al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL);
|
||||
al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)*0.95-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL);
|
||||
al_draw_textf(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/2.2, ALLEGRO_ALIGN_CENTRE, "Level %d: Not implemented yet!", game->level.current_level);
|
||||
al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/1.8, ALLEGRO_ALIGN_CENTRE, "Have some moonwalk instead.");
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ int Moonwalk_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
|||
}
|
||||
|
||||
void Moonwalk_PreloadBitmaps(struct Game *game) {
|
||||
game->level.moonwalk.image =LoadScaledBitmap("table.png", al_get_display_width(game->display), al_get_display_height(game->display));
|
||||
game->level.moonwalk.image =LoadScaledBitmap("levels/disco.jpg", al_get_display_width(game->display), al_get_display_height(game->display));
|
||||
game->level.derpy_walkcycle = LoadScaledBitmap("levels/derpcycle.png", al_get_display_width(game->display)*0.1953125*6, al_get_display_height(game->display)*0.25*4);
|
||||
|
||||
game->level.derpy = al_create_bitmap(al_get_display_width(game->display)*0.1953125, al_get_display_height(game->display)*0.25);
|
||||
|
@ -113,7 +113,7 @@ void Moonwalk_Unload(struct Game *game) {
|
|||
game->level.moonwalk.fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
||||
al_set_target_bitmap(game->level.moonwalk.fade_bitmap);
|
||||
al_draw_bitmap(game->level.moonwalk.image,0,0,0);
|
||||
al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL);
|
||||
al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)*0.95-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL);
|
||||
al_draw_textf(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/2.2, ALLEGRO_ALIGN_CENTRE, "Level %d: Not implemented yet!", game->level.current_level);
|
||||
al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/1.8, ALLEGRO_ALIGN_CENTRE, "Have some moonwalk instead.");
|
||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||
|
|
Loading…
Reference in a new issue