momento/src/player/collide.c

32 lines
831 B
C
Raw Normal View History

2021-03-30 01:42:11 +02:00
/* SPDX-License-Identifier: GPL-3.0-or-later */
/* Copyright (C) 2021 KikooDX */
#include "conf.h"
#include "level.h"
#include "player.h"
#include "tiles.h"
extern struct Level level;
static int collide_single(int x, int y);
void player_collide(int collisions[COLLIDE_POINTS], int x, int y)
{
const int rx = x + PLAYER_WIDTH - 1;
const int dy = y + PLAYER_HEIGHT - 1;
collisions[UP_LEFT] = collide_single(x, y);
collisions[UP_RIGHT] = collide_single(rx, y);
collisions[DOWN_LEFT] = collide_single(x, dy);
collisions[DOWN_RIGHT] = collide_single(rx, dy);
}
static int collide_single(int x, int y)
{
const int tx = x / TILE_WIDTH;
const int ty = y / TILE_WIDTH;
/* out of bounds handling */
if (x < 0 || y < 0 || tx >= level.width || ty >= level.height)
return TILE_OOB;
return level.data[tx + ty * level.width];
}