summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Kaiser2024-05-15 15:21:18 +0200
committerDominik Kaiser2024-05-15 15:21:18 +0200
commite5d9814f121ad378b2364806b2a4791e86654382 (patch)
treec261cd7de186006412aaa6b6bbf7c8ae92bf3269
parent98eb4ded98daf048a97c59b9bd23b0068bd4ba32 (diff)
downloadso_long-e5d9814f121ad378b2364806b2a4791e86654382.tar.gz
so_long-e5d9814f121ad378b2364806b2a4791e86654382.zip
Make collision functions more generic
-rw-r--r--include/so_long.h4
-rw-r--r--src/collision.c32
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);
}