Compare commits
6 Commits
master
...
audio-vers
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7d536d087 | ||
|
|
c2caa8aa34 | ||
|
|
2254b2f74d | ||
|
|
810b89e814 | ||
|
|
61b127c6fd | ||
|
|
f60fb4c1b6 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@ cub3D
|
|||||||
build/
|
build/
|
||||||
.cache/
|
.cache/
|
||||||
test.log
|
test.log
|
||||||
|
dist/
|
||||||
41
Makefile
41
Makefile
@ -1,18 +1,18 @@
|
|||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
# #
|
# #
|
||||||
# ::: :::::::: #
|
# :::::::: #
|
||||||
# Makefile :+: :+: :+: #
|
# Makefile :+: :+: #
|
||||||
# +:+ +:+ +:+ #
|
# +:+ #
|
||||||
# By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ #
|
# By: qmennen <qmennen@student.codam.nl> +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+ #
|
||||||
# Created: 2024/10/15 11:48:46 by whaffman #+# #+# #
|
# Created: 2024/10/15 11:48:46 by whaffman #+# #+# #
|
||||||
# Updated: 2025/06/11 17:41:17 by qmennen ### ########.fr #
|
# Updated: 2025/07/03 18:16:26 by whaffman ######## odam.nl #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
NAME = cub3D
|
NAME = cub3D
|
||||||
|
|
||||||
FLAGS="-DFULLSCREEN=1"
|
FLAGS="-DFULLSCREEN=0"
|
||||||
|
|
||||||
DIST_PATH = dist
|
DIST_PATH = dist
|
||||||
SRC_PATH = src
|
SRC_PATH = src
|
||||||
@ -30,6 +30,9 @@ MLX42_INC_PATH = $(MLX42_PATH)/include/MLX42
|
|||||||
GLAD_INC_PATH = $(MLX42_PATH)/include/glad
|
GLAD_INC_PATH = $(MLX42_PATH)/include/glad
|
||||||
MLX42 = $(MLX42_PATH)/build/libmlx42.a
|
MLX42 = $(MLX42_PATH)/build/libmlx42.a
|
||||||
|
|
||||||
|
WEB = web/demo.html
|
||||||
|
MLX_WEB_LIB = $(MLX42_PATH)/build_web/libmlx42_web.a
|
||||||
|
|
||||||
CC = cc
|
CC = cc
|
||||||
RM = rm -rf
|
RM = rm -rf
|
||||||
|
|
||||||
@ -37,7 +40,7 @@ INCLUDES = -I./$(INC_PATH) -I./$(LIBFT_INC_PATH) -I./$(MLX42_INC_PATH) -I./$(GLA
|
|||||||
|
|
||||||
UNAME_S := $(shell uname -s)
|
UNAME_S := $(shell uname -s)
|
||||||
ifeq ($(UNAME_S),Linux)
|
ifeq ($(UNAME_S),Linux)
|
||||||
LDLIBS := -L$(LIBFT_PATH) -lft -L$(MLX42_PATH)/build -lmlx42 -ldl -lglfw -pthread -lm
|
LDLIBS := -L$(LIBFT_PATH) -lft -L$(MLX42_PATH)/build -lmlx42 -ldl -lglfw -pthread -lm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
VPATH = $(shell find $(SRC_PATH) -type d | tr '\n' ':')
|
VPATH = $(shell find $(SRC_PATH) -type d | tr '\n' ':')
|
||||||
@ -236,7 +239,25 @@ submodules:
|
|||||||
git submodule update --init; \
|
git submodule update --init; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
.PHONY: all clean fclean re srcs run help dist
|
|
||||||
|
#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
|
||||||
|
|
||||||
red:=$(shell tput setaf 1)
|
red:=$(shell tput setaf 1)
|
||||||
green:=$(shell tput setaf 2)
|
green:=$(shell tput setaf 2)
|
||||||
|
|||||||
BIN
assets/monster.png
Normal file
BIN
assets/monster.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
BIN
assets/sounds/door.wav
Normal file
BIN
assets/sounds/door.wav
Normal file
Binary file not shown.
@ -1,38 +0,0 @@
|
|||||||
# **************************************************************************** #
|
|
||||||
# #
|
|
||||||
# :::::::: #
|
|
||||||
# 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
BIN
audio/audio
Binary file not shown.
30
audio/main.c
30
audio/main.c
@ -1,30 +0,0 @@
|
|||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
#include "miniaudio.h"
|
#include "miniaudio.h"
|
||||||
|
|
||||||
#define SND_SIZE 8
|
#define SND_SIZE 9
|
||||||
#define SUCCESS 1
|
#define SUCCESS 1
|
||||||
#define FAILURE 0
|
#define FAILURE 0
|
||||||
|
|
||||||
@ -12,7 +12,8 @@ typedef enum s_sound {
|
|||||||
SND_ENEMY,
|
SND_ENEMY,
|
||||||
SND_PICKUP,
|
SND_PICKUP,
|
||||||
SND_HUM,
|
SND_HUM,
|
||||||
SND_NOISE
|
SND_NOISE,
|
||||||
|
SND_DOOR,
|
||||||
} t_sound;
|
} t_sound;
|
||||||
|
|
||||||
typedef struct s_audio {
|
typedef struct s_audio {
|
||||||
20
inc/cub3d.h
20
inc/cub3d.h
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* :::::::: */
|
||||||
/* cub3d.h :+: :+: :+: */
|
/* cub3d.h :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/06/11 20:32:00 by qmennen ### ########.fr */
|
/* Updated: 2025/07/03 18:11:02 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -40,6 +40,11 @@
|
|||||||
# define M_PI 3.14159265358979323846
|
# define M_PI 3.14159265358979323846
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef WEB
|
||||||
|
# include <emscripten.h>
|
||||||
|
# include <emscripten/html5.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
# define RESET "\033[0m"
|
# define RESET "\033[0m"
|
||||||
# define BLACK "\033[0;30m"
|
# define BLACK "\033[0;30m"
|
||||||
# define RED "\033[0;31m"
|
# define RED "\033[0;31m"
|
||||||
@ -60,6 +65,7 @@
|
|||||||
# define MENU_OPTION_EXIT 2
|
# define MENU_OPTION_EXIT 2
|
||||||
|
|
||||||
# include "MLX42.h"
|
# include "MLX42.h"
|
||||||
|
# include "audio.h"
|
||||||
# include "allowed.h"
|
# include "allowed.h"
|
||||||
# include "libft.h"
|
# include "libft.h"
|
||||||
# include "types.h"
|
# include "types.h"
|
||||||
|
|||||||
@ -182,6 +182,7 @@ typedef struct s_game
|
|||||||
t_screen *screen;
|
t_screen *screen;
|
||||||
t_keyboard *keyboard;
|
t_keyboard *keyboard;
|
||||||
t_scoreboard *scoreboard;
|
t_scoreboard *scoreboard;
|
||||||
|
t_audio *audio;
|
||||||
mlx_image_t *screenshots[MAX_SCREENSHOTS];
|
mlx_image_t *screenshots[MAX_SCREENSHOTS];
|
||||||
struct s_game_manager *manager;
|
struct s_game_manager *manager;
|
||||||
int fps;
|
int fps;
|
||||||
|
|||||||
@ -38,7 +38,6 @@ void audio_uninit(t_audio *audio)
|
|||||||
if (&audio->sounds[i])
|
if (&audio->sounds[i])
|
||||||
{
|
{
|
||||||
ma_sound_uninit(&audio->sounds[i]);
|
ma_sound_uninit(&audio->sounds[i]);
|
||||||
|
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -50,14 +49,16 @@ int audio_load_sounds(t_audio *audio)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const char *sound_files[SND_SIZE] = {
|
const char *sound_files[SND_SIZE] = {
|
||||||
"sounds/walk.wav",
|
"assets/sounds/walk.wav",
|
||||||
"sounds/flash.wav",
|
"assets/sounds/flash.wav",
|
||||||
"sounds/damage.wav",
|
"assets/sounds/damage.wav",
|
||||||
"sounds/death.wav",
|
"assets/sounds/death.wav",
|
||||||
"sounds/enemy.mp3",
|
"assets/sounds/enemy.mp3",
|
||||||
"sounds/pickup.wav",
|
"assets/sounds/pickup.wav",
|
||||||
"sounds/hum.wav",
|
"assets/sounds/hum.wav",
|
||||||
"sounds/noise.wav"};
|
"assets/sounds/noise.wav",
|
||||||
|
"assets/sounds/door.wav",
|
||||||
|
};
|
||||||
|
|
||||||
if (!audio)
|
if (!audio)
|
||||||
return (FAILURE);
|
return (FAILURE);
|
||||||
@ -71,8 +72,13 @@ int audio_load_sounds(t_audio *audio)
|
|||||||
audio_uninit(audio);
|
audio_uninit(audio);
|
||||||
return (FAILURE);
|
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++;
|
i++;
|
||||||
}
|
}
|
||||||
|
ma_sound_set_volume(&audio->sounds[SND_HUM], 0.5f);
|
||||||
return (SUCCESS);
|
return (SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +130,8 @@ int audio_handle_queues(t_audio *audio)
|
|||||||
{
|
{
|
||||||
if (audio->play_queue[i])
|
if (audio->play_queue[i])
|
||||||
{
|
{
|
||||||
audio_play(audio, i);
|
if (!audio_is_playing(audio, i))
|
||||||
|
audio_play(audio, i);
|
||||||
audio->play_queue[i] = 0;
|
audio->play_queue[i] = 0;
|
||||||
}
|
}
|
||||||
if (audio->stop_queue[i])
|
if (audio->stop_queue[i])
|
||||||
@ -18,6 +18,7 @@ static void collect(t_game *game, t_sprite *sprite)
|
|||||||
|
|
||||||
player = game->player;
|
player = game->player;
|
||||||
player->battery_charger += CHARGE_FRAMES;
|
player->battery_charger += CHARGE_FRAMES;
|
||||||
|
game->audio->play_queue[SND_PICKUP] = 1;
|
||||||
sprite->type = SPRITE_TYPE_COLLECTED;
|
sprite->type = SPRITE_TYPE_COLLECTED;
|
||||||
game->scoreboard->collectibles++;
|
game->scoreboard->collectibles++;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/06/03 15:53:32 by qmennen #+# #+# */
|
/* Created: 2025/06/03 15:53:32 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/06/05 18:41:33 by qmennen ### ########.fr */
|
/* Updated: 2025/06/11 18:53:19 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -21,5 +21,6 @@ void handle_flash(t_sprite *sprite, t_game *game)
|
|||||||
{
|
{
|
||||||
sprite->type = SPRITE_TYPE_DISABLED;
|
sprite->type = SPRITE_TYPE_DISABLED;
|
||||||
game->scoreboard->enemies++;
|
game->scoreboard->enemies++;
|
||||||
|
game->audio->stop_queue[SND_ENEMY] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* 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/06/11 17:44:59 by qmennen ### ########.fr */
|
/* Updated: 2025/06/11 19:05:43 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -22,9 +22,7 @@ int game_create(t_game **game)
|
|||||||
(*game)->scoreboard = malloc(sizeof(t_scoreboard));
|
(*game)->scoreboard = malloc(sizeof(t_scoreboard));
|
||||||
ft_memset((*game)->scoreboard, 0, sizeof(t_scoreboard));
|
ft_memset((*game)->scoreboard, 0, sizeof(t_scoreboard));
|
||||||
if (!(*game)->scoreboard)
|
if (!(*game)->scoreboard)
|
||||||
{
|
|
||||||
return (free(*game), FAILURE);
|
return (free(*game), FAILURE);
|
||||||
}
|
|
||||||
return (SUCCESS);
|
return (SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,14 +37,37 @@ void game_over(t_game_manager *manager)
|
|||||||
game->scoreboard->end_time = mlx_get_time();
|
game->scoreboard->end_time = mlx_get_time();
|
||||||
manager->state = GAME_STATE_END_SCREEN;
|
manager->state = GAME_STATE_END_SCREEN;
|
||||||
manager->active_menu = &manager->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);
|
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)
|
void game_run(t_game *game)
|
||||||
{
|
{
|
||||||
static int fps = 0;
|
static int fps = 0;
|
||||||
|
|
||||||
fps += (int)(1.f / game->screen->mlx->delta_time);
|
fps += (int)(1.f / game->screen->mlx->delta_time);
|
||||||
|
handle_sound(game);
|
||||||
set_uniforms(game);
|
set_uniforms(game);
|
||||||
player_update(game, game->screen->mlx->delta_time);
|
player_update(game, game->screen->mlx->delta_time);
|
||||||
cast_rays(game);
|
cast_rays(game);
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* :::::::: */
|
/* ::: :::::::: */
|
||||||
/* moves.c :+: :+: */
|
/* moves.c :+: :+: :+: */
|
||||||
/* +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/05/14 20:08:27 by whaffman #+# #+# */
|
/* Created: 2025/05/14 20:08:27 by whaffman #+# #+# */
|
||||||
/* Updated: 2025/06/10 19:38:49 by whaffman ######## odam.nl */
|
/* Updated: 2025/06/11 18:53:11 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -95,6 +95,7 @@ void player_update(t_game *game, double delta_time)
|
|||||||
{
|
{
|
||||||
game->screen->flash = 3;
|
game->screen->flash = 3;
|
||||||
game->player->battery -= FLASH_BATTERY;
|
game->player->battery -= FLASH_BATTERY;
|
||||||
|
game->audio->play_queue[SND_FLASH] = 1;
|
||||||
interact_door(game);
|
interact_door(game);
|
||||||
}
|
}
|
||||||
if (game->player->hit_timer > 0)
|
if (game->player->hit_timer > 0)
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */
|
/* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/06/11 20:15:21 by qmennen ### ########.fr */
|
/* Updated: 2025/06/11 19:27:27 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ void interact_door(t_game *game)
|
|||||||
pos = vec2_to_int(add(game->player->pos, game->player->dir));
|
pos = vec2_to_int(add(game->player->pos, game->player->dir));
|
||||||
if (game->map->grid[pos.y][pos.x] == TILE_DOOR)
|
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->map->grid[pos.y][pos.x] = TILE_EMPTY;
|
||||||
game->scoreboard->tiles_visited++;
|
game->scoreboard->tiles_visited++;
|
||||||
}
|
}
|
||||||
|
|||||||
39
src/main.c
39
src/main.c
@ -1,21 +1,30 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* :::::::: */
|
||||||
/* main.c :+: :+: :+: */
|
/* main.c :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+ */
|
||||||
/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */
|
/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/06/11 14:58:56 by qmennen ### ########.fr */
|
/* Updated: 2025/07/03 18:15:07 by whaffman ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "cub3d.h"
|
#include "cub3d.h"
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
mlx_t *g_mlx;
|
||||||
|
|
||||||
|
#ifdef WEB
|
||||||
|
static void emscripten_main_loop(void)
|
||||||
{
|
{
|
||||||
t_game_manager *manager;
|
mlx_loop(g_mlx);
|
||||||
t_game *game;
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
t_game_manager *manager;
|
||||||
|
t_game *game;
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
game = NULL;
|
game = NULL;
|
||||||
@ -23,6 +32,11 @@ int main(int argc, char **argv)
|
|||||||
return (EXIT_FAILURE);
|
return (EXIT_FAILURE);
|
||||||
if (!initialize_cub3d(&game, argv[1]))
|
if (!initialize_cub3d(&game, argv[1]))
|
||||||
return (game_free(game), EXIT_FAILURE);
|
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 = game_manager_create(game, START_STATE);
|
||||||
manager->menu = create_main_menu(manager);
|
manager->menu = create_main_menu(manager);
|
||||||
manager->end_screen = create_end_screen(manager);
|
manager->end_screen = create_end_screen(manager);
|
||||||
@ -30,7 +44,12 @@ int main(int argc, char **argv)
|
|||||||
mlx_key_hook(game->screen->mlx, keyhandle, manager);
|
mlx_key_hook(game->screen->mlx, keyhandle, manager);
|
||||||
mlx_loop_hook(game->screen->mlx, game_manager_update, manager);
|
mlx_loop_hook(game->screen->mlx, game_manager_update, manager);
|
||||||
mlx_close_hook(game->screen->mlx, game_manager_destroy, 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);
|
mlx_loop(game->screen->mlx);
|
||||||
|
#endif
|
||||||
game_manager_destroy(manager);
|
game_manager_destroy(manager);
|
||||||
return (EXIT_SUCCESS);
|
return (EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* 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/06/11 15:00:38 by qmennen ### ########.fr */
|
/* Updated: 2025/06/11 18:35:03 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -64,6 +64,8 @@ void game_manager_destroy(void *param)
|
|||||||
menu_free(manager->end_screen, manager->game->screen);
|
menu_free(manager->end_screen, manager->game->screen);
|
||||||
mlx_close_window(manager->game->screen->mlx);
|
mlx_close_window(manager->game->screen->mlx);
|
||||||
mlx_terminate(manager->game->screen->mlx);
|
mlx_terminate(manager->game->screen->mlx);
|
||||||
|
if (manager->game->audio)
|
||||||
|
audio_uninit(manager->game->audio);
|
||||||
if (manager->game)
|
if (manager->game)
|
||||||
game_free(manager->game);
|
game_free(manager->game);
|
||||||
free(manager);
|
free(manager);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/05/28 14:14:11 by qmennen #+# #+# */
|
/* Created: 2025/05/28 14:14:11 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/06/11 14:55:20 by qmennen ### ########.fr */
|
/* Updated: 2025/06/11 19:05:55 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -29,6 +29,7 @@ static void game_start(struct s_menu_item *item, t_game_manager *manager)
|
|||||||
game->scoreboard->start_time = mlx_get_time();
|
game->scoreboard->start_time = mlx_get_time();
|
||||||
menu_toggle(*(manager->active_menu));
|
menu_toggle(*(manager->active_menu));
|
||||||
manager->state = GAME_STATE_PLAYING;
|
manager->state = GAME_STATE_PLAYING;
|
||||||
|
game->audio->play_queue[SND_HUM] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
t_menu *create_main_menu(t_game_manager *manager)
|
t_menu *create_main_menu(t_game_manager *manager)
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* 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/06/11 16:22:09 by qmennen ### ########.fr */
|
/* Updated: 2025/06/11 18:51:46 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -33,6 +33,7 @@ void update_monsters(t_game *game)
|
|||||||
inv_dist = 1.0 / sqrt(dist_squared);
|
inv_dist = 1.0 / sqrt(dist_squared);
|
||||||
sprite->pos.x += d.x * inv_dist * .05f;
|
sprite->pos.x += d.x * inv_dist * .05f;
|
||||||
sprite->pos.y += d.y * inv_dist * .05f;
|
sprite->pos.y += d.y * inv_dist * .05f;
|
||||||
|
game->audio->play_queue[SND_ENEMY] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user