mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 11:06:44 +01:00
refactor first level and timeline
This commit is contained in:
parent
cae92f0272
commit
d6b68a3740
6 changed files with 169 additions and 97 deletions
188
src/level.c
188
src/level.c
|
@ -100,32 +100,24 @@ void Level_Passed(struct Game *game) {
|
|||
}
|
||||
|
||||
void Level_Logic(struct Game *game) {
|
||||
if (game->level.current_level!=1) Moonwalk_Logic(game);
|
||||
}
|
||||
|
||||
void Level_Draw(struct Game *game) {
|
||||
if (!al_get_sample_instance_playing(game->level.music) && (game->loadstate==GAMESTATE_LEVEL)) {
|
||||
al_set_sample_instance_playing(game->level.music, true);
|
||||
al_set_sample_instance_position(game->level.music, game->level.music_pos);
|
||||
}
|
||||
if (game->level.current_level!=1) Moonwalk_Draw(game);
|
||||
else {
|
||||
|
||||
if (game->level.current_level!=1) {
|
||||
Moonwalk_Logic(game);
|
||||
} else {
|
||||
struct ALLEGRO_KEYBOARD_STATE keyboard;
|
||||
al_get_keyboard_state(&keyboard);
|
||||
if (game->level.handle_input) {
|
||||
if (game->level.derpy_angle > 0) { game->level.derpy_angle -= tps(game, 60*0.02); if (game->level.derpy_angle < 0) game->level.derpy_angle = 0; }
|
||||
if (game->level.derpy_angle < 0) { game->level.derpy_angle += tps(game, 60*0.02); if (game->level.derpy_angle > 0) game->level.derpy_angle = 0; }
|
||||
if (game->level.derpy_angle > 0) { game->level.derpy_angle -= 0.02; if (game->level.derpy_angle < 0) game->level.derpy_angle = 0; }
|
||||
if (game->level.derpy_angle < 0) { game->level.derpy_angle += 0.02; if (game->level.derpy_angle > 0) game->level.derpy_angle = 0; }
|
||||
if (al_key_down(&keyboard, ALLEGRO_KEY_UP)) {
|
||||
game->level.derpy_y -= tps(game, 60*0.005);
|
||||
game->level.derpy_angle -= tps(game, 60*0.03);
|
||||
if (game->level.derpy_angle < tps(game, 60*-0.15)) game->level.derpy_angle = tps(game, 60*-0.15);
|
||||
game->level.derpy_y -= 0.005;
|
||||
game->level.derpy_angle -= 0.03;
|
||||
if (game->level.derpy_angle < -0.15) game->level.derpy_angle = -0.15;
|
||||
/*PrintConsole(game, "Derpy Y position: %f", game->level.derpy_y);*/
|
||||
}
|
||||
if (al_key_down(&keyboard, ALLEGRO_KEY_DOWN)) {
|
||||
game->level.derpy_y += tps(game, 60*0.005);
|
||||
game->level.derpy_angle += tps(game, 60*0.03);
|
||||
if (game->level.derpy_angle > tps(game, 60*0.15)) game->level.derpy_angle = tps(game, 60*0.15);
|
||||
game->level.derpy_y += 0.005;
|
||||
game->level.derpy_angle += 0.03;
|
||||
if (game->level.derpy_angle > 0.15) game->level.derpy_angle = 0.15;
|
||||
/*PrintConsole(game, "Derpy Y position: %f", game->level.derpy_y);*/
|
||||
}
|
||||
/*if ((game->level.derpy_y > 0.6) && (game->level.flying)) {
|
||||
|
@ -142,9 +134,107 @@ void Level_Draw(struct Game *game) {
|
|||
if (game->level.derpy_y < 0) game->level.derpy_y=0;
|
||||
else if (game->level.derpy_y > 0.8) game->level.derpy_y=0.8;
|
||||
|
||||
game->level.derpy_y += tps(game, 60*(game->level.derpy_angle / 30));
|
||||
|
||||
game->level.derpy_y += game->level.derpy_angle / 30;
|
||||
}
|
||||
|
||||
int derpyx = game->level.derpy_x*game->viewportWidth;
|
||||
int derpyy = game->level.derpy_y*game->viewportHeight;
|
||||
int derpyw = al_get_bitmap_width(game->level.derpy);
|
||||
int derpyh = al_get_bitmap_height(game->level.derpy);
|
||||
int derpyo = game->viewportWidth*0.1953125-al_get_bitmap_width(game->level.derpy); /* offset */
|
||||
struct Obstacle *tmp = game->level.obstacles;
|
||||
while (tmp) {
|
||||
/*PrintConsole(game, "DRAWING %f %f", tmp->x, tmp->y);*/
|
||||
int x = (tmp->x/100.0)*game->viewportWidth;
|
||||
int y = (tmp->y/100.0)*game->viewportHeight;
|
||||
int w = 0, h = 0;
|
||||
if (tmp->bitmap) {
|
||||
w = al_get_bitmap_width(*(tmp->bitmap))/tmp->cols;
|
||||
h = al_get_bitmap_height(*(tmp->bitmap))/tmp->rows;
|
||||
}
|
||||
if (x > -w) {
|
||||
/*if (!tmp->hit)*/
|
||||
if ((((x>=derpyx+0.38*derpyw+derpyo) && (x<=derpyx+0.94*derpyw+derpyo)) || ((x+w>=derpyx+0.38*derpyw+derpyo) && (x+w<=derpyx+0.94*derpyw+derpyo)) || ((x<=derpyx+0.38*derpyw+derpyo) && (x+w>=derpyx+0.94*derpyw+derpyo))) &&
|
||||
(((y>=derpyy+0.26*derpyh) && (y<=derpyy+0.76*derpyh)) || ((y+h>=derpyy+0.26*derpyh) && (y+h<=derpyy+0.76*derpyh)) || ((y<=derpyy+0.26*derpyh) && (y+h>=derpyy+0.76*derpyh)))) {
|
||||
tmp->hit=true;
|
||||
}
|
||||
|
||||
if (tmp->anim_speed) {
|
||||
tmp->tmp_pos+=1;
|
||||
if (tmp->tmp_pos >= tmp->anim_speed) {
|
||||
tmp->pos++;
|
||||
tmp->tmp_pos = 0;
|
||||
}
|
||||
if (tmp->pos>=tmp->cols*tmp->rows-tmp->blanks) tmp->pos=0;
|
||||
}
|
||||
|
||||
if (tmp->hit) {
|
||||
if (tmp->points>=0) tmp->bitmap = NULL;
|
||||
game->level.hp+=0.0002*tmp->points*(((1-game->level.speed_modifier)/2.0)+1);
|
||||
if (game->level.hp>1) game->level.hp=1;
|
||||
//PrintConsole(game, "POINTS: %d, %f", tmp->points, tps(game, 60*0.0002*tmp->points*game->level.speed_modifier));
|
||||
if ((game->level.hp<=0) && (!game->level.failed)) {
|
||||
game->level.failed = true;
|
||||
game->level.handle_input = false;
|
||||
game->level.speed_modifier = 1;
|
||||
TM_AddBackgroundAction(&LevelFailed, NULL, 0, "levelfailed");
|
||||
}
|
||||
}
|
||||
tmp->x -= game->level.speed*game->level.speed_modifier*tmp->speed*100*al_get_bitmap_width(game->level.stage)/(float)game->viewportWidth;
|
||||
if (tmp->callback) tmp->callback(game, tmp);
|
||||
tmp = tmp->next;
|
||||
} else {
|
||||
if (tmp->next)
|
||||
tmp->next->prev = tmp->prev;
|
||||
if (tmp->prev)
|
||||
tmp->prev->next = tmp->next;
|
||||
else
|
||||
game->level.obstacles = tmp->next;
|
||||
struct Obstacle *t = tmp;
|
||||
tmp = tmp->next;
|
||||
free(t);
|
||||
}
|
||||
}
|
||||
/*if (colision) game->level.hp-=tps(game, 60*0.002);*/
|
||||
|
||||
if ((game->level.sheet_speed) && (game->level.sheet_speed_modifier)) {
|
||||
game->level.sheet_tmp+=1;
|
||||
if (game->level.sheet_tmp >= (game->level.sheet_speed/game->level.speed_modifier)/game->level.sheet_speed_modifier) {
|
||||
game->level.sheet_pos++;
|
||||
game->level.sheet_tmp = 0;
|
||||
}
|
||||
if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows-game->level.sheet_blanks) {
|
||||
game->level.sheet_pos=0;
|
||||
if (game->level.sheet_successor) {
|
||||
SelectDerpySpritesheet(game, game->level.sheet_successor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (game->level.speed > 0) {
|
||||
game->level.cl_pos += game->level.speed*game->level.speed_modifier * 0.2;
|
||||
game->level.bg_pos += game->level.speed*game->level.speed_modifier * 0.6;
|
||||
game->level.st_pos += game->level.speed*game->level.speed_modifier * 1;
|
||||
game->level.fg_pos += game->level.speed*game->level.speed_modifier * 1.75;
|
||||
if (game->level.bg_pos >= 1) game->level.bg_pos=game->level.bg_pos-1;
|
||||
if (game->level.st_pos >= 1) game->level.st_pos=game->level.st_pos-1;
|
||||
if (game->level.fg_pos >= 1) game->level.fg_pos=game->level.fg_pos-1;
|
||||
}
|
||||
game->level.cl_pos += 0.00005;
|
||||
if (game->level.cl_pos >= 1) game->level.cl_pos=game->level.cl_pos-1;
|
||||
|
||||
TM_Process();
|
||||
}
|
||||
}
|
||||
|
||||
void Level_Draw(struct Game *game) {
|
||||
if (!al_get_sample_instance_playing(game->level.music) && (game->loadstate==GAMESTATE_LEVEL)) {
|
||||
al_set_sample_instance_playing(game->level.music, true);
|
||||
al_set_sample_instance_position(game->level.music, game->level.music_pos);
|
||||
}
|
||||
if (game->level.current_level!=1) Moonwalk_Draw(game);
|
||||
else {
|
||||
|
||||
al_draw_bitmap(game->level.clouds, (-game->level.cl_pos)*al_get_bitmap_width(game->level.clouds), 0, 0);
|
||||
al_draw_bitmap(game->level.clouds, (1+(-game->level.cl_pos))*al_get_bitmap_width(game->level.clouds), 0, 0);
|
||||
al_draw_bitmap(game->level.background, (-game->level.bg_pos)*al_get_bitmap_width(game->level.background), 0, 0);
|
||||
|
@ -169,10 +259,8 @@ void Level_Draw(struct Game *game) {
|
|||
h = al_get_bitmap_height(*(tmp->bitmap))/tmp->rows;
|
||||
}
|
||||
if (x > -w) {
|
||||
/*if (!tmp->hit)*/
|
||||
if ((((x>=derpyx+0.38*derpyw+derpyo) && (x<=derpyx+0.94*derpyw+derpyo)) || ((x+w>=derpyx+0.38*derpyw+derpyo) && (x+w<=derpyx+0.94*derpyw+derpyo)) || ((x<=derpyx+0.38*derpyw+derpyo) && (x+w>=derpyx+0.94*derpyw+derpyo))) &&
|
||||
(((y>=derpyy+0.26*derpyh) && (y<=derpyy+0.76*derpyh)) || ((y+h>=derpyy+0.26*derpyh) && (y+h<=derpyy+0.76*derpyh)) || ((y<=derpyy+0.26*derpyh) && (y+h>=derpyy+0.76*derpyh)))) {
|
||||
tmp->hit=true;
|
||||
if ((tmp->hit) && (tmp->points<0)) {
|
||||
colision = true;
|
||||
}
|
||||
|
||||
if (tmp->bitmap) {
|
||||
|
@ -181,33 +269,9 @@ void Level_Draw(struct Game *game) {
|
|||
al_destroy_bitmap(subbitmap);
|
||||
}
|
||||
|
||||
if (tmp->anim_speed) {
|
||||
tmp->tmp_pos+=tps(game, 60);
|
||||
if (tmp->tmp_pos >= tmp->anim_speed) {
|
||||
tmp->pos++;
|
||||
tmp->tmp_pos = 0;
|
||||
}
|
||||
if (tmp->pos>=tmp->cols*tmp->rows-tmp->blanks) tmp->pos=0;
|
||||
}
|
||||
|
||||
/*al_draw_bitmap(*(tmp->bitmap), x, y, 0);*/
|
||||
if (game->level.debug_show_sprite_frames) al_draw_rectangle(x, y, x+w, y+h, al_map_rgba(255,0,0,255), 3);
|
||||
|
||||
if (tmp->hit) {
|
||||
if (tmp->points<0) colision = true;
|
||||
else tmp->bitmap = NULL;
|
||||
game->level.hp+=tps(game, 60*0.0002*tmp->points*(((1-game->level.speed_modifier)/2.0)+1));
|
||||
if (game->level.hp>1) game->level.hp=1;
|
||||
PrintConsole(game, "POINTS: %d, %f", tmp->points, tps(game, 60*0.0002*tmp->points*game->level.speed_modifier));
|
||||
if ((game->level.hp<=0) && (!game->level.failed)) {
|
||||
game->level.failed = true;
|
||||
game->level.handle_input = false;
|
||||
game->level.speed_modifier = 1;
|
||||
TM_AddBackgroundAction(&LevelFailed, NULL, 0, "levelfailed");
|
||||
}
|
||||
}
|
||||
tmp->x -= tps(game, game->level.speed*game->level.speed_modifier*60*tmp->speed)*100*al_get_bitmap_width(game->level.stage)/(float)game->viewportWidth;
|
||||
if (tmp->callback) tmp->callback(game, tmp);
|
||||
tmp = tmp->next;
|
||||
} else {
|
||||
if (tmp->next)
|
||||
|
@ -226,19 +290,6 @@ void Level_Draw(struct Game *game) {
|
|||
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_sheet),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);
|
||||
if ((game->level.sheet_speed) && (game->level.sheet_speed_modifier)) {
|
||||
game->level.sheet_tmp+=tps(game, 60);
|
||||
if (game->level.sheet_tmp >= (game->level.sheet_speed/game->level.speed_modifier)/game->level.sheet_speed_modifier) {
|
||||
game->level.sheet_pos++;
|
||||
game->level.sheet_tmp = 0;
|
||||
}
|
||||
if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows-game->level.sheet_blanks) {
|
||||
game->level.sheet_pos=0;
|
||||
if (game->level.sheet_successor) {
|
||||
SelectDerpySpritesheet(game, game->level.sheet_successor);
|
||||
}
|
||||
}
|
||||
}
|
||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||
|
||||
al_draw_tinted_rotated_bitmap(game->level.derpy, al_map_rgba(255,255-colision*255,255-colision*255,255), al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy)/2, derpyx+game->viewportWidth*0.1953125, derpyy + al_get_bitmap_height(game->level.derpy)/2, game->level.derpy_angle, 0);
|
||||
|
@ -254,17 +305,6 @@ void Level_Draw(struct Game *game) {
|
|||
al_draw_bitmap(game->level.foreground, (-game->level.fg_pos)*al_get_bitmap_width(game->level.foreground), 0 ,0);
|
||||
al_draw_bitmap(game->level.foreground, (1+(-game->level.fg_pos))*al_get_bitmap_width(game->level.foreground), 0 ,0);
|
||||
|
||||
if (game->level.speed > 0) {
|
||||
game->level.cl_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 0.2;
|
||||
game->level.bg_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 0.6;
|
||||
game->level.st_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 1;
|
||||
game->level.fg_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 1.75;
|
||||
if (game->level.bg_pos >= 1) game->level.bg_pos=game->level.bg_pos-1;
|
||||
if (game->level.st_pos >= 1) game->level.st_pos=game->level.st_pos-1;
|
||||
if (game->level.fg_pos >= 1) game->level.fg_pos=game->level.fg_pos-1;
|
||||
}
|
||||
game->level.cl_pos += tps(game, 60*0.00005);
|
||||
if (game->level.cl_pos >= 1) game->level.cl_pos=game->level.cl_pos-1;
|
||||
|
||||
al_set_target_bitmap(game->level.meter_bmp);
|
||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||
|
@ -277,7 +317,7 @@ void Level_Draw(struct Game *game) {
|
|||
|
||||
al_draw_tinted_bitmap(game->level.meter_bmp, al_map_rgba(game->level.meter_alpha,game->level.meter_alpha,game->level.meter_alpha,game->level.meter_alpha), game->viewportWidth*0.95-al_get_bitmap_width(game->level.meter_bmp), game->viewportHeight*0.975-al_get_bitmap_height(game->level.meter_bmp), 0);
|
||||
|
||||
TM_Process();
|
||||
TM_Draw();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,9 +26,10 @@
|
|||
bool LevelFailed(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
if (state == TM_ACTIONSTATE_INIT) {
|
||||
TM_AddBackgroundAction(&FadeOut, NULL, 3000, "fadeout");
|
||||
} else if (state == TM_ACTIONSTATE_RUNNING) {
|
||||
} else if (state == TM_ACTIONSTATE_DRAW) {
|
||||
al_draw_filled_rectangle(0, 0, game->viewportWidth, game->viewportHeight, al_map_rgba(0,0,0,100));
|
||||
al_draw_text_with_shadow(game->menu.font_title, al_map_rgb(255,255,255), game->viewportWidth*0.5, game->viewportHeight*0.4, ALLEGRO_ALIGN_CENTRE, "Failed!");
|
||||
} else if (state == TM_ACTIONSTATE_RUNNING) {
|
||||
game->level.speed-=0.00001;
|
||||
return false;
|
||||
}
|
||||
|
@ -47,7 +48,7 @@ bool Walk(struct Game *game, struct TM_Action *action, enum TM_ActionState state
|
|||
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||
if (!(action->arguments)) SelectDerpySpritesheet(game, "walk");
|
||||
action->arguments++;
|
||||
game->level.derpy_x+=tps(game, 60*0.001);
|
||||
game->level.derpy_x+=0.001;
|
||||
if (game->level.derpy_x<0.05) return false;
|
||||
return true;
|
||||
}
|
||||
|
@ -61,7 +62,7 @@ bool Move(struct Game *game, struct TM_Action *action, enum TM_ActionState state
|
|||
|
||||
bool ShowMeter(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||
game->level.meter_alpha+=tps(game, 60*4);
|
||||
game->level.meter_alpha+=4;
|
||||
if (game->level.meter_alpha>=255) {
|
||||
game->level.meter_alpha=255;
|
||||
return true;
|
||||
|
@ -74,12 +75,12 @@ bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state)
|
|||
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||
if (!(action->arguments)) {
|
||||
SelectDerpySpritesheet(game, "fly");
|
||||
game->level.derpy_angle = tps(game, 60*-0.15);
|
||||
game->level.derpy_angle = -0.15;
|
||||
/*game->level.gg = true;*/
|
||||
TM_AddBackgroundAction(&ShowMeter, NULL, 0, "showmeter");
|
||||
action->arguments++;
|
||||
}
|
||||
game->level.derpy_y-=tps(game, 60*0.004);
|
||||
game->level.derpy_y-=0.004;
|
||||
if (game->level.derpy_y>0.2) return false;
|
||||
game->level.handle_input=true;
|
||||
return true;
|
||||
|
@ -93,9 +94,9 @@ bool Run(struct Game *game, struct TM_Action *action, enum TM_ActionState state)
|
|||
game->level.speed_modifier=1;
|
||||
action->arguments++;
|
||||
}
|
||||
game->level.derpy_y+=tps(game, 60*0.0042);
|
||||
if (game->level.derpy_angle > 0) { game->level.derpy_angle -= tps(game, 60*0.02); if (game->level.derpy_angle < 0) game->level.derpy_angle = 0; }
|
||||
if (game->level.derpy_angle < 0) { game->level.derpy_angle += tps(game, 60*0.02); if (game->level.derpy_angle > 0) game->level.derpy_angle = 0; }
|
||||
game->level.derpy_y+=0.0042;
|
||||
if (game->level.derpy_angle > 0) { game->level.derpy_angle -= 0.02; if (game->level.derpy_angle < 0) game->level.derpy_angle = 0; }
|
||||
if (game->level.derpy_angle < 0) { game->level.derpy_angle += 0.02; if (game->level.derpy_angle > 0) game->level.derpy_angle = 0; }
|
||||
if (game->level.derpy_y<0.65) return false;
|
||||
game->level.derpy_angle = 0;
|
||||
SelectDerpySpritesheet(game, "run");
|
||||
|
@ -118,7 +119,7 @@ bool GenerateObstacles(struct Game *game, struct TM_Action *action, enum TM_Acti
|
|||
*in = true;*/
|
||||
}
|
||||
else if (state == TM_ACTIONSTATE_RUNNING) {
|
||||
if (rand()%(10000/(int)tps(game, 60*85*game->level.speed_modifier))<=3) {
|
||||
if (rand()%(10000/(int)(85*game->level.speed_modifier))<=3) {
|
||||
PrintConsole(game, "OBSTACLE %d", *count);
|
||||
(*count)++;
|
||||
struct Obstacle *obst = malloc(sizeof(struct Obstacle));
|
||||
|
@ -192,7 +193,7 @@ bool GenerateObstacles(struct Game *game, struct TM_Action *action, enum TM_Acti
|
|||
game->level.obstacles = obst;
|
||||
if (*count > 128) return true;
|
||||
}
|
||||
} else {
|
||||
} else if (state == TM_ACTIONSTATE_DESTROY) {
|
||||
free(action->arguments->value);
|
||||
TM_DestroyArgs(action->arguments);
|
||||
action->arguments = NULL;
|
||||
|
@ -217,6 +218,11 @@ bool Letter(struct Game *game, struct TM_Action *action, enum TM_ActionState sta
|
|||
free(action->arguments->value);
|
||||
TM_DestroyArgs(action->arguments);
|
||||
}
|
||||
if (state == TM_ACTIONSTATE_DRAW) {
|
||||
float* f = (float*)action->arguments->value;
|
||||
al_draw_tinted_bitmap(game->level.letter, al_map_rgba(*f,*f,*f,*f), (game->viewportWidth-al_get_bitmap_width(game->level.letter))/2.0, al_get_bitmap_height(game->level.letter)*-0.05, 0);
|
||||
return false;
|
||||
}
|
||||
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||
if (!action->arguments) {
|
||||
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(float)));
|
||||
|
@ -231,7 +237,7 @@ bool Letter(struct Game *game, struct TM_Action *action, enum TM_ActionState sta
|
|||
action->arguments->next->next = NULL;
|
||||
}
|
||||
float* f = (float*)action->arguments->value;
|
||||
*f+=tps(game,350);
|
||||
*f+=5;
|
||||
if (*f>255) *f=255;
|
||||
al_draw_tinted_bitmap(game->level.letter, al_map_rgba(*f,*f,*f,*f), (game->viewportWidth-al_get_bitmap_width(game->level.letter))/2.0, al_get_bitmap_height(game->level.letter)*-0.05, 0);
|
||||
struct ALLEGRO_KEYBOARD_STATE keyboard;
|
||||
|
@ -257,10 +263,11 @@ bool FadeIn(struct Game *game, struct TM_Action *action, enum TM_ActionState sta
|
|||
al_clear_to_color(al_map_rgb(0,0,0));
|
||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||
} else if (state == TM_ACTIONSTATE_RUNNING) {
|
||||
al_draw_tinted_bitmap(fade_bitmap,al_map_rgba_f(1,1,1,*fadeloop/255.0),0,0,0);
|
||||
*fadeloop-=tps(game, 600);
|
||||
*fadeloop-=10;
|
||||
if (*fadeloop<=0) return true;
|
||||
} else {
|
||||
} else if (state == TM_ACTIONSTATE_DRAW) {
|
||||
al_draw_tinted_bitmap(fade_bitmap,al_map_rgba_f(1,1,1,*fadeloop/255.0),0,0,0);
|
||||
} else if (state == TM_ACTIONSTATE_DESTROY) {
|
||||
al_destroy_bitmap(fade_bitmap);
|
||||
free(fadeloop);
|
||||
TM_DestroyArgs(action->arguments);
|
||||
|
@ -285,10 +292,11 @@ bool FadeOut(struct Game *game, struct TM_Action *action, enum TM_ActionState st
|
|||
al_clear_to_color(al_map_rgb(0,0,0));
|
||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||
} else if (state == TM_ACTIONSTATE_RUNNING) {
|
||||
al_draw_tinted_bitmap(fade_bitmap,al_map_rgba_f(1,1,1,*fadeloop/255.0),0,0,0);
|
||||
*fadeloop+=tps(game, 600);
|
||||
*fadeloop+=10;
|
||||
if (*fadeloop>=256) return true;
|
||||
} else {
|
||||
} else if (state == TM_ACTIONSTATE_DRAW) {
|
||||
al_draw_tinted_bitmap(fade_bitmap,al_map_rgba_f(1,1,1,*fadeloop/255.0),0,0,0);
|
||||
} else if (state == TM_ACTIONSTATE_DESTROY) {
|
||||
PrintConsole(game, "Leaving level with %d HP", (int)(game->level.hp*100));
|
||||
al_destroy_bitmap(fade_bitmap);
|
||||
free(fadeloop);
|
||||
|
@ -319,14 +327,15 @@ bool Welcome(struct Game *game, struct TM_Action *action, enum TM_ActionState st
|
|||
float fade = *tmp;
|
||||
if (fade>255) fade=255;
|
||||
if (*tmp > 2048) { *tmp=255; *in=false; }
|
||||
al_draw_tinted_bitmap(game->level.welcome, al_map_rgba_f(fade/255.0,fade/255.0,fade/255.0,fade/255.0), 0, 0, 0);
|
||||
if (*in) {
|
||||
*tmp+=tps(game, 600);
|
||||
*tmp+=10;
|
||||
} else {
|
||||
*tmp-=tps(game, 600);
|
||||
*tmp-=10;
|
||||
if (*tmp<=0) { return true; }
|
||||
}
|
||||
} else {
|
||||
} else if (state == TM_ACTIONSTATE_DRAW) {
|
||||
al_draw_tinted_bitmap(game->level.welcome, al_map_rgba_f(*tmp/255.0,*tmp/255.0,*tmp/255.0,*tmp/255.0), 0, 0, 0);
|
||||
} else if (state == TM_ACTIONSTATE_DESTROY) {
|
||||
free(action->arguments->value);
|
||||
free(action->arguments->next->value);
|
||||
TM_DestroyArgs(action->arguments);
|
||||
|
|
|
@ -45,13 +45,13 @@ void Obst_RotateSin(struct Game *game, struct Obstacle *obstacle) {
|
|||
float* a = (float*)obstacle->data;
|
||||
/*PrintConsole(game, "%p - %f", obstacle, obstacle->y);*/
|
||||
obstacle->angle = sin(*a)/2.0;
|
||||
*a+=tps(game, 4.5);
|
||||
*a+=4.5/60.0;
|
||||
}
|
||||
|
||||
void Obst_MoveSin(struct Game *game, struct Obstacle *obstacle) {
|
||||
float* a = (float*)obstacle->data;
|
||||
/*PrintConsole(game, "%p - %f", obstacle, obstacle->y);*/
|
||||
obstacle->y -= sin(*a)*4;
|
||||
*a+=tps(game, 4.5);
|
||||
*a+=4.5/60.0;
|
||||
obstacle->y += sin(*a)*4;
|
||||
}
|
||||
|
|
|
@ -534,6 +534,7 @@ int main(int argc, char **argv){
|
|||
return -1;
|
||||
}
|
||||
al_register_event_source(game.event_queue, al_get_timer_event_source(game.timer));
|
||||
al_wait_for_vsync();
|
||||
al_start_timer(game.timer);
|
||||
|
||||
setlocale(LC_NUMERIC, "C"); /* FIXME? */
|
||||
|
|
|
@ -108,6 +108,25 @@ void TM_Process() {
|
|||
}
|
||||
}
|
||||
|
||||
void TM_Draw() {
|
||||
if (!game) return;
|
||||
if (queue) {
|
||||
if ((*queue->function) && (queue->active)) {
|
||||
(*queue->function)(game, queue, TM_ACTIONSTATE_DRAW);
|
||||
}
|
||||
}
|
||||
/* process all elements from background marked as active */
|
||||
struct TM_Action *pom = background;
|
||||
while (pom!=NULL) {
|
||||
if (pom->active) {
|
||||
if (*pom->function) {
|
||||
(*pom->function)(game, pom, TM_ACTIONSTATE_DRAW);
|
||||
}
|
||||
}
|
||||
pom = pom->next;
|
||||
}
|
||||
}
|
||||
|
||||
void TM_HandleEvent(ALLEGRO_EVENT *ev) {
|
||||
if (ev->type != ALLEGRO_EVENT_TIMER) return;
|
||||
if (!game) return;
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
enum TM_ActionState {
|
||||
TM_ACTIONSTATE_INIT,
|
||||
TM_ACTIONSTATE_RUNNING,
|
||||
TM_ACTIONSTATE_DRAW,
|
||||
TM_ACTIONSTATE_DESTROY
|
||||
};
|
||||
|
||||
|
@ -52,6 +53,8 @@ struct TM_Action {
|
|||
void TM_Init(struct Game* game);
|
||||
/*! \brief Process current timeline actions. */
|
||||
void TM_Process();
|
||||
/*! \brief Ask current timeline actions to draw. */
|
||||
void TM_Draw();
|
||||
/*! \brief Handle timer events. */
|
||||
void TM_HandleEvent(ALLEGRO_EVENT *ev);
|
||||
/*! \brief Add new action to main queue. */
|
||||
|
|
Loading…
Reference in a new issue