summaryrefslogtreecommitdiff
path: root/src/collision.c
diff options
context:
space:
mode:
authorDominik Kaiser2024-06-10 16:40:28 +0200
committerGitHub2024-06-10 16:40:28 +0200
commit568827dc74eb4e2a7719d7cfbd48083facf85cc3 (patch)
treedd896d064a49bb399b7c942fde49ae0bf892263b /src/collision.c
parent7b230503231e154c5400413b4f9b87dd6fcd8304 (diff)
parentff7d60ad044e98e1e2e14170b5804d141856a949 (diff)
downloadso_long-568827dc74eb4e2a7719d7cfbd48083facf85cc3.tar.gz
so_long-568827dc74eb4e2a7719d7cfbd48083facf85cc3.zip
Merge map-checker into masterHEADmaster
Map checker
Diffstat (limited to 'src/collision.c')
-rw-r--r--src/collision.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/collision.c b/src/collision.c
index 115b70a..c416184 100644
--- a/src/collision.c
+++ b/src/collision.c
@@ -6,7 +6,7 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/14 11:48:59 by dkaiser #+# #+# */
-/* Updated: 2024/05/15 15:19:54 by dkaiser ### ########.fr */
+/* Updated: 2024/06/10 15:43:32 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -59,7 +59,8 @@ int check_map_collision(t_collider collider, t_tilemap *map, enum e_tile type)
{
check_tile.x = local_tile.x + x;
check_tile.y = local_tile.y + y;
- result |= check_map_collision_for_tile(collider, map, check_tile, type);
+ result |= check_map_collision_for_tile(collider, map, check_tile,
+ type);
y++;
}
x++;
@@ -82,23 +83,32 @@ static int check_map_collision_for_tile(t_collider collider, t_tilemap *map,
return (0);
}
-void move_and_slide(t_actor *actor, t_tilemap *map, double delta_time)
+int move_and_slide(t_actor *actor, t_tilemap *map, double delta_time)
{
t_collider c;
+ int is_moving;
+ is_moving = 0;
c.size = actor->size;
c.position.x = actor->position.x + (actor->velocity.x * delta_time);
c.position.y = actor->position.y;
if ((check_map_collision(c, map, WALL) & (RIGHT | LEFT)) == 0)
+ {
actor->position.x = c.position.x;
+ is_moving += (actor->direction.x != 0);
+ }
else
actor->velocity.x = 0;
c.position.x = actor->position.x;
c.position.y = actor->position.y + (actor->velocity.y * delta_time);
if ((check_map_collision(c, map, WALL) & (UP | DOWN)) == 0)
+ {
actor->position.y = c.position.y;
+ is_moving += (actor->direction.y != 0);
+ }
else
actor->velocity.y = 0;
+ return (is_moving != 0);
}
int is_on_floor(t_collider collider, t_tilemap *map)