mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 11:06:44 +01:00
fine tune of collision handling
This commit is contained in:
parent
c6e3707ab4
commit
160761e899
2 changed files with 20 additions and 6 deletions
23
src/level.c
23
src/level.c
|
@ -141,7 +141,7 @@ 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.flying = true;
|
||||
/*game->level.gg = true;*/
|
||||
TM_AddBackgroundAction(&ShowMeter, NULL, 0, "showmeter");
|
||||
}
|
||||
action->arguments++;
|
||||
|
@ -263,8 +263,8 @@ void Level_Draw(struct Game *game) {
|
|||
SelectDerpySpritesheet(game, "fly");
|
||||
game->level.flying = true;
|
||||
game->level.sheet_speed = tps(game, 60*2.4);
|
||||
}*/
|
||||
if (!game->level.flying) game->level.sheet_speed = tps(game, 60*0.0020/game->level.speed);
|
||||
}
|
||||
if (!game->level.flying) game->level.sheet_speed = tps(game, 60*0.0020/game->level.speed); */
|
||||
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;
|
||||
}
|
||||
|
@ -280,6 +280,7 @@ void Level_Draw(struct Game *game) {
|
|||
int derpyy = game->level.derpy_y*al_get_display_height(game->display);
|
||||
int derpyw = al_get_bitmap_width(game->level.derpy);
|
||||
int derpyh = al_get_bitmap_height(game->level.derpy);
|
||||
int derpyo = al_get_display_width(game->display)*0.1953125-al_get_bitmap_width(game->level.derpy); /* offset */
|
||||
bool colision = false;
|
||||
struct Obstacle *tmp = game->level.obstacles;
|
||||
while (tmp) {
|
||||
|
@ -290,7 +291,7 @@ void Level_Draw(struct Game *game) {
|
|||
int w = al_get_bitmap_width(*(tmp->bitmap));
|
||||
int h = al_get_bitmap_height(*(tmp->bitmap));
|
||||
if (!tmp->hit)
|
||||
if ((((x>=derpyx+0.36*derpyw) && (x<=derpyx+0.94*derpyw)) || ((x+w>=derpyx+0.36*derpyw) && (x+w<=derpyx+0.94*derpyw))) &&
|
||||
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))) &&
|
||||
(((y>=derpyy+0.26*derpyh) && (y<=derpyy+0.76*derpyh)) || ((y+h>=derpyy+0.26*derpyh) && (y+h<=derpyy+0.76*derpyh)))) {
|
||||
tmp->hit=true;
|
||||
game->level.hp+=tps(game, 60*0.0002*tmp->points);
|
||||
|
@ -300,6 +301,8 @@ void Level_Draw(struct Game *game) {
|
|||
}
|
||||
}
|
||||
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) colision = true;
|
||||
tmp->x -= tps(game, game->level.speed*60)*310;
|
||||
if (tmp->callback) tmp->callback(game, tmp);
|
||||
|
@ -333,6 +336,14 @@ void Level_Draw(struct Game *game) {
|
|||
|
||||
al_draw_tinted_bitmap(game->level.derpy, al_map_rgba(255,255-colision*255,255-colision*255,255), derpyx+al_get_display_width(game->display)*0.1953125-al_get_bitmap_width(game->level.derpy), derpyy, 0);
|
||||
|
||||
/* if ((((x>=derpyx+0.36*derpyw) && (x<=derpyx+0.94*derpyw)) || ((x+w>=derpyx+0.36*derpyw) && (x+w<=derpyx+0.94*derpyw))) &&
|
||||
(((y>=derpyy+0.26*derpyh) && (y<=derpyy+0.76*derpyh)) || ((y+h>=derpyy+0.26*derpyh) && (y+h<=derpyy+0.76*derpyh)))) {
|
||||
*/
|
||||
if (game->level.debug_show_sprite_frames) {
|
||||
al_draw_rectangle(derpyx+derpyo, derpyy, derpyx+derpyw+derpyo, derpyy+derpyh, al_map_rgba(0,255,0,255), 3);
|
||||
al_draw_rectangle(derpyx+0.38*derpyw+derpyo, derpyy+0.26*derpyh, derpyx+0.94*derpyw+derpyo, derpyy+0.76*derpyh, al_map_rgba(0,0,255,255), 3);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
@ -477,8 +488,8 @@ void Level_Load(struct Game *game) {
|
|||
game->level.sheet_tmp = 0;
|
||||
game->level.handle_input = false;
|
||||
game->level.obstacles = NULL;
|
||||
game->level.flying = false;
|
||||
game->level.meter_alpha=0;
|
||||
game->level.debug_show_sprite_frames=false;
|
||||
al_clear_to_color(al_map_rgb(0,0,0));
|
||||
if (game->level.current_level!=1) Moonwalk_Load(game);
|
||||
else {
|
||||
|
@ -532,6 +543,8 @@ int Level_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
|||
} else if ((game->debug) && (ev->keyboard.keycode==ALLEGRO_KEY_F3)) {
|
||||
game->level.hp += 0.1;
|
||||
if (game->level.hp > 1) game->level.hp=1;
|
||||
} else if ((game->debug) && (ev->keyboard.keycode==ALLEGRO_KEY_F4)) {
|
||||
game->level.debug_show_sprite_frames = !game->level.debug_show_sprite_frames;
|
||||
}
|
||||
if (game->level.current_level!=1) Moonwalk_Keydown(game, ev);
|
||||
if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) {
|
||||
|
|
|
@ -121,6 +121,7 @@ struct Level {
|
|||
ALLEGRO_BITMAP *derpy; /*!< Derpy sprite. */
|
||||
ALLEGRO_BITMAP *meter_bmp; /*!< Bitmap of the HP meter. */
|
||||
ALLEGRO_BITMAP *meter_image; /*!< Derpy image used in the HP meter. */
|
||||
bool debug_show_sprite_frames; /*!< When true, displays colorful borders around spritesheets and their active areas. */
|
||||
struct Spritesheet* derpy_sheets; /*!< List of sprite sheets of Derpy character. */
|
||||
struct Spritesheet* pony_sheets; /*!< List of sprite sheets of character rescued by Derpy. */
|
||||
struct {
|
||||
|
|
Loading…
Reference in a new issue