diff options
| -rw-r--r-- | include/so_long.h | 4 | ||||
| -rw-r--r-- | src/collision.c | 32 |
2 files changed, 18 insertions, 18 deletions
diff --git a/include/so_long.h b/include/so_long.h index 4a3c924..1f25424 100644 --- a/include/so_long.h +++ b/include/so_long.h @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/08 14:14:02 by dkaiser #+# #+# */ -/* Updated: 2024/05/15 15:10:27 by dkaiser ### ########.fr */ +/* Updated: 2024/05/15 15:19:06 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -95,7 +95,7 @@ t_vector grid_to_screen_pos(t_ivector grid_pos, t_ivector tile_size); t_ivector screen_to_grid_pos(t_vector screen_pos, t_ivector tile_size); enum e_tile get_tile(t_tilemap *map, int x, int y); int check_collision(t_collider a, t_collider b); -int check_wall_collision(t_collider collider, t_tilemap *map); +int check_map_collision(t_collider collider, t_tilemap *map, enum e_tile type); void move_and_slide(t_actor *actor, t_tilemap *map, double delta_time); int is_on_floor(t_collider collider, t_tilemap *map); diff --git a/src/collision.c b/src/collision.c index f7ab7ec..115b70a 100644 --- a/src/collision.c +++ b/src/collision.c @@ -6,14 +6,14 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/14 11:48:59 by dkaiser #+# #+# */ -/* Updated: 2024/05/15 15:02:47 by dkaiser ### ########.fr */ +/* Updated: 2024/05/15 15:19:54 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ #include "so_long.h" -static int check_wall_collision_with_cell(t_collider collider, t_tilemap *map, - t_ivector tile); +static int check_map_collision_for_tile(t_collider collider, t_tilemap *map, + t_ivector tile, enum e_tile type); /* * Checks if a and b are colliding and returns the direction relative to a. @@ -41,7 +41,7 @@ int check_collision(t_collider a, t_collider b) return (result); } -int check_wall_collision(t_collider collider, t_tilemap *map) +int check_map_collision(t_collider collider, t_tilemap *map, enum e_tile type) { int result; t_ivector local_tile; @@ -59,7 +59,7 @@ int check_wall_collision(t_collider collider, t_tilemap *map) { check_tile.x = local_tile.x + x; check_tile.y = local_tile.y + y; - result |= check_wall_collision_with_cell(collider, map, check_tile); + result |= check_map_collision_for_tile(collider, map, check_tile, type); y++; } x++; @@ -67,17 +67,17 @@ int check_wall_collision(t_collider collider, t_tilemap *map) return (result); } -static int check_wall_collision_with_cell(t_collider collider, t_tilemap *map, - t_ivector tile) +static int check_map_collision_for_tile(t_collider collider, t_tilemap *map, + t_ivector tile, enum e_tile type) { - t_collider wall; + t_collider tile_collider; - if (get_tile(map, tile.x, tile.y) == WALL) + if (get_tile(map, tile.x, tile.y) == type) { - wall.position = grid_to_screen_pos(tile, map->tile_size); - wall.size.x = map->tile_size.x; - wall.size.y = map->tile_size.y; - return (check_collision(collider, wall)); + tile_collider.position = grid_to_screen_pos(tile, map->tile_size); + tile_collider.size.x = map->tile_size.x; + tile_collider.size.y = map->tile_size.y; + return (check_collision(collider, tile_collider)); } return (0); } @@ -89,13 +89,13 @@ void move_and_slide(t_actor *actor, t_tilemap *map, double delta_time) c.size = actor->size; c.position.x = actor->position.x + (actor->velocity.x * delta_time); c.position.y = actor->position.y; - if ((check_wall_collision(c, map) & (RIGHT | LEFT)) == 0) + if ((check_map_collision(c, map, WALL) & (RIGHT | LEFT)) == 0) actor->position.x = c.position.x; else actor->velocity.x = 0; c.position.x = actor->position.x; c.position.y = actor->position.y + (actor->velocity.y * delta_time); - if ((check_wall_collision(c, map) & (UP | DOWN)) == 0) + if ((check_map_collision(c, map, WALL) & (UP | DOWN)) == 0) actor->position.y = c.position.y; else actor->velocity.y = 0; @@ -104,7 +104,7 @@ void move_and_slide(t_actor *actor, t_tilemap *map, double delta_time) int is_on_floor(t_collider collider, t_tilemap *map) { collider.position.y += 5; - if (check_wall_collision(collider, map)) + if (check_map_collision(collider, map, WALL)) return (1); return (0); } |
