diff options
| author | Dominik Kaiser | 2024-06-10 16:40:28 +0200 |
|---|---|---|
| committer | GitHub | 2024-06-10 16:40:28 +0200 |
| commit | 568827dc74eb4e2a7719d7cfbd48083facf85cc3 (patch) | |
| tree | dd896d064a49bb399b7c942fde49ae0bf892263b /src/collision.c | |
| parent | 7b230503231e154c5400413b4f9b87dd6fcd8304 (diff) | |
| parent | ff7d60ad044e98e1e2e14170b5804d141856a949 (diff) | |
| download | so_long-master.tar.gz so_long-master.zip | |
Map checker
Diffstat (limited to 'src/collision.c')
| -rw-r--r-- | src/collision.c | 16 |
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) |
