enemy collisions
This commit is contained in:
parent
d8bef01b32
commit
d8b93222c0
@ -6,7 +6,7 @@
|
|||||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||||
/* +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */
|
/* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/05/29 09:35:12 by whaffman ######## odam.nl */
|
/* Updated: 2025/05/29 11:06:24 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -30,6 +30,7 @@ typedef enum SPRITE_TYPE
|
|||||||
SPRITE_TYPE_COLLECTIBLE = 1,
|
SPRITE_TYPE_COLLECTIBLE = 1,
|
||||||
SPRITE_TYPE_COLLECTED = 2,
|
SPRITE_TYPE_COLLECTED = 2,
|
||||||
SPRITE_TYPE_ENEMY = 3,
|
SPRITE_TYPE_ENEMY = 3,
|
||||||
|
SPRITE_TYPE_DISABLED = 4,
|
||||||
} t_sprite_type;
|
} t_sprite_type;
|
||||||
|
|
||||||
typedef struct s_vec2
|
typedef struct s_vec2
|
||||||
@ -149,15 +150,18 @@ typedef struct s_sprite_column
|
|||||||
int x;
|
int x;
|
||||||
} t_sprite_column;
|
} t_sprite_column;
|
||||||
|
|
||||||
|
|
||||||
typedef struct s_game
|
typedef struct s_game
|
||||||
{
|
{
|
||||||
t_map *map;
|
t_map *map;
|
||||||
t_player *player;
|
t_player *player;
|
||||||
t_screen *screen;
|
t_screen *screen;
|
||||||
t_keyboard *keyboard;
|
t_keyboard *keyboard;
|
||||||
|
|
||||||
double elapsed_time;
|
double elapsed_time;
|
||||||
int fps;
|
int fps;
|
||||||
} t_game;
|
} t_game;
|
||||||
|
|
||||||
typedef struct s_game_manager
|
typedef struct s_game_manager
|
||||||
{
|
{
|
||||||
t_game_state state;
|
t_game_state state;
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* :::::::: */
|
||||||
/* collision.c :+: :+: :+: */
|
/* collision.c :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/04/22 14:40:59 by qmennen #+# #+# */
|
/* Created: 2025/04/22 14:40:59 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/05/28 17:13:24 by qmennen ### ########.fr */
|
/* Updated: 2025/05/29 11:17:56 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -28,16 +28,21 @@ int collision_sprite(t_map *map, t_player *player, double xa, double ya)
|
|||||||
i = 0;
|
i = 0;
|
||||||
while (i < map->n_sprites)
|
while (i < map->n_sprites)
|
||||||
{
|
{
|
||||||
if (sprites[i].type == SPRITE_TYPE_COLLECTIBLE)
|
if ((sprites[i].type == SPRITE_TYPE_COLLECTIBLE || sprites[i].type == SPRITE_TYPE_ENEMY)
|
||||||
|
&& (fabs(player->pos.x + xa - sprites[i].pos.x) < 0.5
|
||||||
|
&& fabs(player->pos.y + ya - sprites[i].pos.y) < 0.5))
|
||||||
{
|
{
|
||||||
|
if (sprites[i].type == SPRITE_TYPE_ENEMY)
|
||||||
if (fabs(player->pos.x + xa - sprites[i].pos.x) < 0.5
|
{
|
||||||
&& fabs(player->pos.y + ya - sprites[i].pos.y) < 0.5)
|
player->battery -= 0.0001;
|
||||||
|
printf("You were attacked by an enemy! Battery: %.2f\n", player->battery);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sprites[i].type = SPRITE_TYPE_COLLECTED;
|
sprites[i].type = SPRITE_TYPE_COLLECTED;
|
||||||
collect(player);
|
collect(player);
|
||||||
return (1);
|
|
||||||
}
|
}
|
||||||
|
return (1);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* :::::::: */
|
||||||
/* game.c :+: :+: :+: */
|
/* game.c :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
|
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/05/28 17:39:24 by qmennen ### ########.fr */
|
/* Updated: 2025/05/29 11:14:15 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -56,6 +56,7 @@ void game_run(t_game *game)
|
|||||||
}
|
}
|
||||||
handle_battery(game);
|
handle_battery(game);
|
||||||
handle_record(game);
|
handle_record(game);
|
||||||
|
collision_sprite(game->map, game->player, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void game_free(t_game *game)
|
void game_free(t_game *game)
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* :::::::: */
|
||||||
/* game_hud.c :+: :+: :+: */
|
/* game_hud.c :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/05/28 14:26:29 by qmennen #+# #+# */
|
/* Created: 2025/05/28 14:26:29 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/05/28 17:01:42 by qmennen ### ########.fr */
|
/* Updated: 2025/05/29 11:07:12 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -53,21 +53,11 @@ static void draw_battery(mlx_image_t *img, float battery)
|
|||||||
|
|
||||||
void handle_battery(t_game *game)
|
void handle_battery(t_game *game)
|
||||||
{
|
{
|
||||||
static mlx_image_t *bat_img = NULL;
|
|
||||||
|
|
||||||
game->player->battery -= game->screen->mlx->delta_time / 50;
|
game->player->battery -= game->screen->mlx->delta_time / 50;
|
||||||
if (game->player->battery < 0.20)
|
if (game->player->battery < 0)
|
||||||
{
|
{
|
||||||
bat_img = mlx_put_string(
|
game->player->battery = 0;
|
||||||
game->screen->mlx, "Battery LOW!", 960, 512);
|
game_terminate(game);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (bat_img != NULL)
|
|
||||||
{
|
|
||||||
mlx_delete_image(game->screen->mlx, bat_img);
|
|
||||||
bat_img = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
draw_battery(game->screen->minimap, game->player->battery);
|
draw_battery(game->screen->minimap, game->player->battery);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* :::::::: */
|
||||||
/* game_manager.c :+: :+: :+: */
|
/* game_manager.c :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/05/27 13:48:18 by qmennen #+# #+# */
|
/* Created: 2025/05/27 13:48:18 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/05/28 15:07:38 by qmennen ### ########.fr */
|
/* Updated: 2025/05/29 11:06:33 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* :::::::: */
|
||||||
/* monster.c :+: :+: :+: */
|
/* monster.c :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/05/28 17:15:52 by qmennen #+# #+# */
|
/* Created: 2025/05/28 17:15:52 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/05/28 17:45:37 by qmennen ### ########.fr */
|
/* Updated: 2025/05/29 10:47:19 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||||
/* +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/05/14 20:08:27 by whaffman #+# #+# */
|
/* Created: 2025/05/14 20:08:27 by whaffman #+# #+# */
|
||||||
/* Updated: 2025/05/29 09:39:04 by whaffman ######## odam.nl */
|
/* Updated: 2025/05/29 11:16:13 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ static void move(t_map *map, t_player *player, int dir, double delta)
|
|||||||
player->pos.y += ya;
|
player->pos.y += ya;
|
||||||
player->is_moving = 1;
|
player->is_moving = 1;
|
||||||
}
|
}
|
||||||
collision_sprite(map, player, xa, ya);
|
// collision_sprite(map, player, xa, ya);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void strave(t_map *map, t_player *player, int dir, double delta)
|
static void strave(t_map *map, t_player *player, int dir, double delta)
|
||||||
@ -94,5 +94,8 @@ void player_update(t_game *game, double delta_time)
|
|||||||
else if (get_key(game, MLX_KEY_RIGHT))
|
else if (get_key(game, MLX_KEY_RIGHT))
|
||||||
rotate(game->player, 2.5, delta_time);
|
rotate(game->player, 2.5, delta_time);
|
||||||
if (get_key(game, MLX_KEY_SPACE))
|
if (get_key(game, MLX_KEY_SPACE))
|
||||||
|
{
|
||||||
game->screen->flash = 3;
|
game->screen->flash = 3;
|
||||||
|
game->player->battery -= 0.1f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||||
/* +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/04/22 13:10:06 by whaffman #+# #+# */
|
/* Created: 2025/04/22 13:10:06 by whaffman #+# #+# */
|
||||||
/* Updated: 2025/05/28 19:03:24 by whaffman ######## odam.nl */
|
/* Updated: 2025/05/29 11:40:47 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -44,6 +44,8 @@ int handle_wall(char *token, t_map *map)
|
|||||||
{
|
{
|
||||||
if (ft_strcmp(token, wall_tokens[i]) == 0)
|
if (ft_strcmp(token, wall_tokens[i]) == 0)
|
||||||
{
|
{
|
||||||
|
if (map->textures[i] != NULL)
|
||||||
|
return (FAILURE);
|
||||||
map->textures[i] = load_texture(texture_path);
|
map->textures[i] = load_texture(texture_path);
|
||||||
if (map->textures[i] == NULL)
|
if (map->textures[i] == NULL)
|
||||||
return (FAILURE);
|
return (FAILURE);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||||
/* +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */
|
/* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/05/29 09:47:41 by whaffman ######## odam.nl */
|
/* Updated: 2025/05/29 11:16:51 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -69,8 +69,9 @@ static void draw_sprite_column(
|
|||||||
|
|
||||||
void handle_flash(t_sprite *sprite, t_game *game)
|
void handle_flash(t_sprite *sprite, t_game *game)
|
||||||
{
|
{
|
||||||
if (sprite->type == SPRITE_TYPE_ENEMY && game->screen->flash > 0)
|
if (sprite->type == SPRITE_TYPE_ENEMY && game->screen->flash > 0
|
||||||
sprite->type = SPRITE_TYPE_COLLECTED;
|
&& sprite->dist < 2.0)
|
||||||
|
sprite->type = SPRITE_TYPE_DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_sprite(t_game *game, t_sprite *sprite, t_render *render)
|
void draw_sprite(t_game *game, t_sprite *sprite, t_render *render)
|
||||||
@ -107,7 +108,8 @@ void render_sprites(t_render *render, t_game *game)
|
|||||||
i = 0;
|
i = 0;
|
||||||
while (i < game->map->n_sprites)
|
while (i < game->map->n_sprites)
|
||||||
{
|
{
|
||||||
if (game->map->sprites[i].type == SPRITE_TYPE_COLLECTED)
|
if (game->map->sprites[i].type == SPRITE_TYPE_DISABLED
|
||||||
|
|| game->map->sprites[i].type == SPRITE_TYPE_COLLECTED)
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
continue ;
|
continue ;
|
||||||
|
|||||||
19
test.log
19
test.log
@ -1,10 +1,27 @@
|
|||||||
KO! maps/invalid/double_floor_color.cub
|
KO! maps/invalid/double_floor_color.cub
|
||||||
|
KO! maps/invalid/double_floor_texture.cub
|
||||||
OK! maps/invalid/double_player.cub
|
OK! maps/invalid/double_player.cub
|
||||||
KO! maps/invalid/double_wall_texture.cub
|
OK! maps/invalid/double_sprite_identifier.cub
|
||||||
|
OK! maps/invalid/double_wall_texture.cub
|
||||||
KO! maps/invalid/empty_line_in_map.cub
|
KO! maps/invalid/empty_line_in_map.cub
|
||||||
|
OK! maps/invalid/extra_floor_token.cub
|
||||||
|
OK! maps/invalid/extra_sprite_token.cub
|
||||||
|
OK! maps/invalid/extra_wall_token.cub
|
||||||
|
OK! maps/invalid/garbage_config_line.cub
|
||||||
OK! maps/invalid/invalid_color.cub
|
OK! maps/invalid/invalid_color.cub
|
||||||
|
OK! maps/invalid/invalid_sprite_character.cub
|
||||||
|
KO! maps/invalid/invalid_sprite_identifier_token.cub
|
||||||
KO! maps/invalid/missing_floor_color.cub
|
KO! maps/invalid/missing_floor_color.cub
|
||||||
|
OK! maps/invalid/missing_floor_path.cub
|
||||||
|
OK! maps/invalid/missing_sprite_path.cub
|
||||||
|
OK! maps/invalid/missing_wall_path.cub
|
||||||
KO! maps/invalid/missing_wall_texture.cub
|
KO! maps/invalid/missing_wall_texture.cub
|
||||||
KO! maps/invalid/no_player.cub
|
KO! maps/invalid/no_player.cub
|
||||||
|
OK! maps/invalid/non-existing_floor_texture.cub
|
||||||
|
OK! maps/invalid/non-existing_sprite_texture.cub
|
||||||
|
OK! maps/invalid/non-existing_texture.cub
|
||||||
KO! maps/invalid/not_enclosed_map.cub
|
KO! maps/invalid/not_enclosed_map.cub
|
||||||
|
KO! maps/invalid/not_enclosed_map_extra_empty_tile.cub
|
||||||
|
KO! maps/invalid/sprite_outside_wall.cub
|
||||||
OK! maps/invalid/test.cub
|
OK! maps/invalid/test.cub
|
||||||
|
OK! maps/invalid/unknown_existing_sprite.cub
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user