unnamed-platformer/src/collide.c

55 lines
1.3 KiB
C
Raw Normal View History

2020-02-19 10:41:15 +01:00
#include "collide.h"
#include "draw.h"
2020-02-19 10:41:15 +01:00
2020-02-15 12:34:57 +01:00
#define PLAYER_SIDES 11
#define LEVEL_WIDTH 28
2020-02-11 11:44:37 +01:00
2020-02-11 13:55:57 +01:00
char collide(int x, int y, char level[], char tile)
2020-02-11 11:44:37 +01:00
{
2020-02-26 11:55:20 +01:00
if ((level[(int)(x/16) + (int)(y/16) * LEVEL_WIDTH] == tile) ||
(level[(int)(x/16) + (int)((y+PLAYER_SIDES)/16) * LEVEL_WIDTH] == tile) ||
(level[(int)((x+PLAYER_SIDES)/16) + (int)((y+PLAYER_SIDES)/16) *
LEVEL_WIDTH] == tile) || (level[(int)((x+PLAYER_SIDES)/16) + (int)(y/16) *
LEVEL_WIDTH] == tile)) return 1;
2020-02-26 11:55:20 +01:00
return 0;
2020-02-11 11:44:37 +01:00
}
char collide_point(int x, int y, char level[], char tile)
{
return (level[(int)(x/16) + (int)(y/16) * LEVEL_WIDTH] == tile);
}
char collide_solid(int x, int y, char level[])
{
2020-02-26 11:55:20 +01:00
return (collide(x, y, level, '0') ||
collide(x, y, level, '^') ||
collide(x, y, level, '~') ||
collide(x, y, level, '#'));
}
char collide_and_erase(int x, int y, char level[], char tile)
{
char collided = 0;
if (collide_point(x, y, level, tile))
{
erase_tile(x, y, level);
collided = 1;
}
if (collide_point(x + 11, y, level, tile))
{
erase_tile(x + 11, y, level);
collided = 1;
}
if (collide_point(x, y + 11, level, tile))
{
erase_tile(x, y + 11, level);
collided = 1;
}
if (collide_point(x + 11, y + 11, level, tile))
{
erase_tile(x + 11, y + 11, level);
collided = 1;
}
return collided;
}