Compare commits

..

No commits in common. "audio-version" and "master" have entirely different histories.

30 changed files with 123 additions and 140 deletions

1
.gitignore vendored
View File

@ -5,4 +5,3 @@ cub3D
build/
.cache/
test.log
dist/

View File

@ -1,18 +1,18 @@
# **************************************************************************** #
# #
# :::::::: #
# Makefile :+: :+: #
# +:+ #
# By: qmennen <qmennen@student.codam.nl> +#+ #
# +#+ #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/10/15 11:48:46 by whaffman #+# #+# #
# Updated: 2025/07/03 18:16:26 by whaffman ######## odam.nl #
# Updated: 2025/06/11 17:41:17 by qmennen ### ########.fr #
# #
# **************************************************************************** #
NAME = cub3D
FLAGS="-DFULLSCREEN=0"
FLAGS="-DFULLSCREEN=1"
DIST_PATH = dist
SRC_PATH = src
@ -30,9 +30,6 @@ MLX42_INC_PATH = $(MLX42_PATH)/include/MLX42
GLAD_INC_PATH = $(MLX42_PATH)/include/glad
MLX42 = $(MLX42_PATH)/build/libmlx42.a
WEB = web/demo.html
MLX_WEB_LIB = $(MLX42_PATH)/build_web/libmlx42_web.a
CC = cc
RM = rm -rf
@ -239,25 +236,7 @@ submodules:
git submodule update --init; \
fi
#WEBSTUFF
$(MLX_WEB_LIB):
@cd $(MLX42_PATH) && emcmake cmake -B build_web
@cd $(MLX42_PATH) && cmake --build build_web --parallel
@-mv $(MLX42_PATH)/build_web/libmlx42.a $(MLX_WEB_LIB)
web: $(WEB)
$(WEB): $(SRCS) $(MLX_WEB_LIB)
mkdir -p web
emcc -DWEB -O3 $(INCLUDES) -pthread $(SOURCES) \
-o $(WEB) \
$(MLX_WEB_LIB) \
-s USE_GLFW=3 -s USE_WEBGL2=1 -s FULL_ES3=1 -s WASM=1 \
-s NO_EXIT_RUNTIME=1 -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
-s ALLOW_MEMORY_GROWTH
.PHONY: all clean fclean re srcs run help dist web
.PHONY: all clean fclean re srcs run help dist
red:=$(shell tput setaf 1)
green:=$(shell tput setaf 2)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

38
audio/Makefile Normal file
View File

@ -0,0 +1,38 @@
# **************************************************************************** #
# #
# :::::::: #
# Makefile :+: :+: #
# +:+ #
# By: whaffman <whaffman@student.codam.nl> +#+ #
# +#+ #
# Created: 2025/06/02 13:18:45 by whaffman #+# #+# #
# Updated: 2025/06/11 17:41:19 by whaffman ######## odam.nl #
# #
# **************************************************************************** #
NAME := audio
CC := cc
SRCS := $(wildcard *.c)
OBJS := $(SRCS:.c=.o)
CFLAGS := -Wall -Wextra -Werror
LDLIBS := -lm -ldl -lpthread -L../lib/libft -lft
INCLUDES := -I../inc -I../lib/libft/inc
RM := rm -f
.PHONY: all clean fclean re
all: $(NAME)
$(NAME): $(OBJS)
$(CC) $(CFLAGS) $(LDLIBS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
clean:
$(RM) $(OBJS)
fclean: clean
$(RM) $(NAME)
re: fclean all

BIN
audio/audio Executable file

Binary file not shown.

View File

@ -38,6 +38,7 @@ void audio_uninit(t_audio *audio)
if (&audio->sounds[i])
{
ma_sound_uninit(&audio->sounds[i]);
}
i++;
}
@ -49,16 +50,14 @@ int audio_load_sounds(t_audio *audio)
{
int i;
const char *sound_files[SND_SIZE] = {
"assets/sounds/walk.wav",
"assets/sounds/flash.wav",
"assets/sounds/damage.wav",
"assets/sounds/death.wav",
"assets/sounds/enemy.mp3",
"assets/sounds/pickup.wav",
"assets/sounds/hum.wav",
"assets/sounds/noise.wav",
"assets/sounds/door.wav",
};
"sounds/walk.wav",
"sounds/flash.wav",
"sounds/damage.wav",
"sounds/death.wav",
"sounds/enemy.mp3",
"sounds/pickup.wav",
"sounds/hum.wav",
"sounds/noise.wav"};
if (!audio)
return (FAILURE);
@ -72,13 +71,8 @@ int audio_load_sounds(t_audio *audio)
audio_uninit(audio);
return (FAILURE);
}
if (i == SND_WALK || i == SND_HUM || i == SND_NOISE)
ma_sound_set_looping(&audio->sounds[i], MA_TRUE);
else
ma_sound_set_looping(&audio->sounds[i], MA_FALSE);
i++;
}
ma_sound_set_volume(&audio->sounds[SND_HUM], 0.5f);
return (SUCCESS);
}
@ -130,7 +124,6 @@ int audio_handle_queues(t_audio *audio)
{
if (audio->play_queue[i])
{
if (!audio_is_playing(audio, i))
audio_play(audio, i);
audio->play_queue[i] = 0;
}

View File

@ -1,6 +1,6 @@
#include "miniaudio.h"
#define SND_SIZE 9
#define SND_SIZE 8
#define SUCCESS 1
#define FAILURE 0
@ -12,8 +12,7 @@ typedef enum s_sound {
SND_ENEMY,
SND_PICKUP,
SND_HUM,
SND_NOISE,
SND_DOOR,
SND_NOISE
} t_sound;
typedef struct s_audio {

30
audio/main.c Normal file
View File

@ -0,0 +1,30 @@
#include "audio.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> // For sleep function
int main(void)
{
t_audio *audio;
audio = audio_init();
if (!audio)
{
fprintf(stderr, "Failed to initialize audio.\n");
return 1;
}
if (audio_load_sounds(audio) != SUCCESS)
{
fprintf(stderr, "Failed to load sounds.\n");
return 1;
}
printf("Audio initialized and sounds loaded successfully.\n");
audio->play_queue[SND_ENEMY] = 1; // Example to play enemy sound
audio_handle_queues(audio);
sleep(10); // Keep the program running to hear the sound
audio_uninit(audio);
}

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* cub3d.h :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* ::: :::::::: */
/* cub3d.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
/* Updated: 2025/07/03 18:11:02 by whaffman ######## odam.nl */
/* Updated: 2025/06/11 20:32:00 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -40,11 +40,6 @@
# define M_PI 3.14159265358979323846
# endif
# ifdef WEB
# include <emscripten.h>
# include <emscripten/html5.h>
# endif
# define RESET "\033[0m"
# define BLACK "\033[0;30m"
# define RED "\033[0;31m"
@ -65,7 +60,6 @@
# define MENU_OPTION_EXIT 2
# include "MLX42.h"
# include "audio.h"
# include "allowed.h"
# include "libft.h"
# include "types.h"

View File

@ -182,7 +182,6 @@ typedef struct s_game
t_screen *screen;
t_keyboard *keyboard;
t_scoreboard *scoreboard;
t_audio *audio;
mlx_image_t *screenshots[MAX_SCREENSHOTS];
struct s_game_manager *manager;
int fps;

View File

@ -18,7 +18,6 @@ static void collect(t_game *game, t_sprite *sprite)
player = game->player;
player->battery_charger += CHARGE_FRAMES;
game->audio->play_queue[SND_PICKUP] = 1;
sprite->type = SPRITE_TYPE_COLLECTED;
game->scoreboard->collectibles++;
}

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/06/03 15:53:32 by qmennen #+# #+# */
/* Updated: 2025/06/11 18:53:19 by qmennen ### ########.fr */
/* Updated: 2025/06/05 18:41:33 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -21,6 +21,5 @@ void handle_flash(t_sprite *sprite, t_game *game)
{
sprite->type = SPRITE_TYPE_DISABLED;
game->scoreboard->enemies++;
game->audio->stop_queue[SND_ENEMY] = 1;
}
}

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
/* Updated: 2025/06/11 19:05:43 by qmennen ### ########.fr */
/* Updated: 2025/06/11 17:44:59 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -22,7 +22,9 @@ int game_create(t_game **game)
(*game)->scoreboard = malloc(sizeof(t_scoreboard));
ft_memset((*game)->scoreboard, 0, sizeof(t_scoreboard));
if (!(*game)->scoreboard)
{
return (free(*game), FAILURE);
}
return (SUCCESS);
}
@ -37,37 +39,14 @@ void game_over(t_game_manager *manager)
game->scoreboard->end_time = mlx_get_time();
manager->state = GAME_STATE_END_SCREEN;
manager->active_menu = &manager->end_screen;
ft_memset(game->audio->stop_queue, 1, SND_SIZE * sizeof(char));
game->audio->stop_queue[SND_DEATH] = 0;
game->audio->play_queue[SND_DEATH] = 1;
audio_handle_queues(game->audio);
set_uniforms(game);
}
static void handle_sound(t_game *game)
{
t_audio *audio;
audio = game->audio;
if (!audio)
return ;
if (game->player->is_moving)
audio->play_queue[SND_WALK] = 1;
else
audio->stop_queue[SND_WALK] = 1;
if (game->player->hit_timer > 0)
audio->play_queue[SND_DAMAGE] = 1;
else
audio->stop_queue[SND_DAMAGE] = 1;
audio_handle_queues(audio);
}
void game_run(t_game *game)
{
static int fps = 0;
fps += (int)(1.f / game->screen->mlx->delta_time);
handle_sound(game);
set_uniforms(game);
player_update(game, game->screen->mlx->delta_time);
cast_rays(game);

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* moves.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* :::::::: */
/* moves.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/05/14 20:08:27 by whaffman #+# #+# */
/* Updated: 2025/06/11 18:53:11 by qmennen ### ########.fr */
/* Updated: 2025/06/10 19:38:49 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
@ -95,7 +95,6 @@ void player_update(t_game *game, double delta_time)
{
game->screen->flash = 3;
game->player->battery -= FLASH_BATTERY;
game->audio->play_queue[SND_FLASH] = 1;
interact_door(game);
}
if (game->player->hit_timer > 0)

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */
/* Updated: 2025/06/11 19:27:27 by qmennen ### ########.fr */
/* Updated: 2025/06/11 20:15:21 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -37,7 +37,6 @@ void interact_door(t_game *game)
pos = vec2_to_int(add(game->player->pos, game->player->dir));
if (game->map->grid[pos.y][pos.x] == TILE_DOOR)
{
game->audio->play_queue[SND_DOOR] = 1;
game->map->grid[pos.y][pos.x] = TILE_EMPTY;
game->scoreboard->tiles_visited++;
}

View File

@ -1,26 +1,17 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* main.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* ::: :::::::: */
/* main.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */
/* Updated: 2025/07/03 18:15:07 by whaffman ######## odam.nl */
/* Updated: 2025/06/11 14:58:56 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
#include "cub3d.h"
mlx_t *g_mlx;
#ifdef WEB
static void emscripten_main_loop(void)
{
mlx_loop(g_mlx);
}
#endif
int main(int argc, char **argv)
{
t_game_manager *manager;
@ -32,11 +23,6 @@ int main(int argc, char **argv)
return (EXIT_FAILURE);
if (!initialize_cub3d(&game, argv[1]))
return (game_free(game), EXIT_FAILURE);
game->audio = audio_init();
if (!game->audio)
return (game_free(game), EXIT_FAILURE);
if (audio_load_sounds(game->audio) == FAILURE)
return (game_free(game), EXIT_FAILURE);
manager = game_manager_create(game, START_STATE);
manager->menu = create_main_menu(manager);
manager->end_screen = create_end_screen(manager);
@ -44,12 +30,7 @@ int main(int argc, char **argv)
mlx_key_hook(game->screen->mlx, keyhandle, manager);
mlx_loop_hook(game->screen->mlx, game_manager_update, manager);
mlx_close_hook(game->screen->mlx, game_manager_destroy, manager);
#ifdef WEB
g_mlx = game->screen->mlx;
emscripten_set_main_loop_arg(emscripten_main_loop, 0, true);
#else
mlx_loop(game->screen->mlx);
#endif
game_manager_destroy(manager);
return (EXIT_SUCCESS);
}

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/05/27 13:48:18 by qmennen #+# #+# */
/* Updated: 2025/06/11 18:35:03 by qmennen ### ########.fr */
/* Updated: 2025/06/11 15:00:38 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -64,8 +64,6 @@ void game_manager_destroy(void *param)
menu_free(manager->end_screen, manager->game->screen);
mlx_close_window(manager->game->screen->mlx);
mlx_terminate(manager->game->screen->mlx);
if (manager->game->audio)
audio_uninit(manager->game->audio);
if (manager->game)
game_free(manager->game);
free(manager);

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/05/28 14:14:11 by qmennen #+# #+# */
/* Updated: 2025/06/11 19:05:55 by qmennen ### ########.fr */
/* Updated: 2025/06/11 14:55:20 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -29,7 +29,6 @@ static void game_start(struct s_menu_item *item, t_game_manager *manager)
game->scoreboard->start_time = mlx_get_time();
menu_toggle(*(manager->active_menu));
manager->state = GAME_STATE_PLAYING;
game->audio->play_queue[SND_HUM] = 1;
}
t_menu *create_main_menu(t_game_manager *manager)

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/05/28 17:15:52 by qmennen #+# #+# */
/* Updated: 2025/06/11 18:51:46 by qmennen ### ########.fr */
/* Updated: 2025/06/11 16:22:09 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -33,7 +33,6 @@ void update_monsters(t_game *game)
inv_dist = 1.0 / sqrt(dist_squared);
sprite->pos.x += d.x * inv_dist * .05f;
sprite->pos.y += d.y * inv_dist * .05f;
game->audio->play_queue[SND_ENEMY] = 1;
}
}
}