diff options
Diffstat (limited to 'original/colisiones.c')
| -rw-r--r-- | original/colisiones.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/original/colisiones.c b/original/colisiones.c new file mode 100644 index 0000000..52b69be --- /dev/null +++ b/original/colisiones.c @@ -0,0 +1,60 @@ +#include "main.h" + +void collisionDetect(GameState *game) +{ + for(int i = 0; i < NUM_CAJAS; i++) + { + float mw = game->man.w, mh = game->man.h; + float mx =game->man.x, my = game->man.y; + float bx = game->suelo[i].x, by = game->suelo[i].y, bw = game->suelo[i].w, bh = game->suelo[i].h; + if(mx+mw/2 > bx && mx+mw/2<bx+bw) + { + //are we bumping our head? + if(my < by+bh && my > by) + { + //correct y + game->man.y = by+bh; + my = by+bh; + + //bumped our head, stop any jump velocity + game->man.dy = 0; + } + } + if(mx+mw > bx && mx<bx+bw) + { + //are we landing on the ledge + if(my+mh > by && my < by) + { + //correct y + game->man.y = by-mh; + my = by-mh; + + //landed on this ledge, stop any jump velocity + game->man.dy = 0; + game->salto = 0; + } + } + + if(my+mh > by && my<by+bh) + { + //rubbing against right edge + if(mx < bx+bw && mx+mw > bx+bw) + { + //correct x + game->man.x = bx+bw; + mx = bx+bw; + + game->man.dx = 0; + } + //rubbing against left edge + else if(mx+mw > bx && mx < bx) + { + //correct x + game->man.x = bx-mw; + mx = bx-mw; + + game->man.dx = 0; + } + } + } +} |
