]> git.dkaiser.de - 42/so_long.git/commitdiff
Add gravity and jumping
authorDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Wed, 15 May 2024 12:04:28 +0000 (14:04 +0200)
committerDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Wed, 15 May 2024 12:04:28 +0000 (14:04 +0200)
include/so_long.h
src/collision.c
src/player_process.c

index 97ef5c72882c3023c3bb23b4078a93effe912c1c..48c34aa1385790d4f2800d74e973eff05f1928c1 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/05/08 14:14:02 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/05/15 12:06:35 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/05/15 14:04:06 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -92,6 +92,8 @@ int                           check_collision(t_vector a_pos, t_ivector a_size,
                                        t_vector b_pos, t_ivector b_size);
 int                            check_wall_collision(t_vector a_pos, t_ivector a_size,
                                        t_tilemap *map);
-void                   move_and_slide(t_player *player, t_tilemap *map);
+void                   move_and_slide(t_player *player, t_tilemap *map,
+                                       double delta_time);
+int                            is_on_floor(t_vector pos, t_ivector size, t_tilemap *map);
 
 #endif // SO_LONG_H
index d21e321be0afee4135d4f7fbd58db119729a480a..5c16130856ebdaba3d42ae111b59cf60f8382193 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/05/14 11:48:59 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/05/15 12:06:55 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/05/15 13:20:29 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -84,11 +84,11 @@ static int  check_wall_collision_with_cell(t_vector a_pos, t_ivector a_size,
        return (0);
 }
 
-void move_and_slide(t_player *player, t_tilemap *map)
+void move_and_slide(t_player *player, t_tilemap *map, double delta_time)
 {
        t_vector move_pos;
 
-       move_pos.x = player->position.x + player->velocity.x;
+       move_pos.x = player->position.x + (player->velocity.x * delta_time);
        move_pos.y = player->position.y;
 
        if ((check_wall_collision(move_pos, player->size, map) & (RIGHT | LEFT)) == 0)
@@ -97,9 +97,17 @@ void move_and_slide(t_player *player, t_tilemap *map)
                player->velocity.x = 0;
 
        move_pos.x = player->position.x;
-       move_pos.y = player->position.y + player->velocity.y;
+       move_pos.y = player->position.y + (player->velocity.y * delta_time);
        if ((check_wall_collision(move_pos, player->size, map) & (UP | DOWN)) == 0)
                player->position.y = move_pos.y;
        else
                player->velocity.y = 0;
 }
+
+int is_on_floor(t_vector pos, t_ivector size, t_tilemap *map)
+{
+       pos.y += 5;
+       if (check_wall_collision(pos, size, map))
+               return (1);
+       return (0);
+}
index 52277f87e8d57ae28d4e6d2e7371063fc50bd7c1..7e27530ea6b623cd610b443ca3fde6c539b8ce52 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/05/14 12:40:05 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/05/15 12:03:52 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/05/15 13:53:01 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -21,12 +21,12 @@ void        player_process(t_game *game)
 
        player = &game->player;
        player->direction = get_direction_from_input(game);
-       player->velocity.x = player->direction.x * PLAYER_MOVE_SPEED
-               * game->mlx->delta_time;
-       player->velocity.y = player->direction.y * PLAYER_MOVE_SPEED
-               * game->mlx->delta_time;
-
-       move_and_slide(player, &game->map);
+       player->velocity.x = player->direction.x * PLAYER_MOVE_SPEED;
+       player->velocity.y += 50;
+       if (player->direction.y == -1 && is_on_floor(player->position, player->size,
+                       &game->map))
+               player->velocity.y = -1000;
+       move_and_slide(player, &game->map, game->mlx->delta_time);
 }
 
 static t_vector        get_direction_from_input(t_game *game)