diff --git a/CMakeLists.txt b/CMakeLists.txt
index 89c3e71..fe038ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -297,6 +297,7 @@ add_executable(my_rpg
include/components/attack_component.h
src/systems/combat_methods.c
src/combat/attacks.c
+ src/sound.c
src/player_utilities.c
include/player_utilities.h
include/systems/inventory.h
@@ -324,7 +325,9 @@ add_executable(my_rpg
src/npc/mage.c
src/combat/boss.c
src/components/combat_holder.c
- src/systems/combat_utility.c src/systems/particule_methods.c)
+ src/systems/combat_utility.c
+ src/systems/particule_methods.c
+)
add_compile_options(-W -Wall -Wextra -Wshadow)
diff --git a/Makefile b/Makefile
index 459fc3d..2861ccf 100644
--- a/Makefile
+++ b/Makefile
@@ -51,7 +51,8 @@ SRC = src/main.c \
src/components/particule_component.c \
src/systems/particule_system.c \
src/systems/combat_utility.c \
- src/systems/particule_methods.c
+ src/systems/particule_methods.c \
+ src/sound.c
OBJ = $(SRC:%.c=%.o)
diff --git a/include/setup.h b/include/setup.h
index 3fe696b..9c2283a 100644
--- a/include/setup.h
+++ b/include/setup.h
@@ -32,6 +32,7 @@ void resolution_set_txt(gc_entity *entity, gc_engine *engine, \
enum gc_mousekeys __);
void framerate_set_text(gc_entity *entity, gc_engine *engine, \
enum gc_mousekeys __);
+void sound_set_text(gc_entity *entity, gc_engine *engine, float vol);
bool fullscreen(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
enum gc_mousekeys __);
@@ -43,6 +44,10 @@ bool framerate_up(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
enum gc_mousekeys __);
bool framerate_down(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
enum gc_mousekeys __);
+bool sound_up(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
+enum gc_mousekeys __);
+bool sound_down(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
+enum gc_mousekeys __);
bool dialog_input0(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \
enum gc_mousekeys key);
diff --git a/include/systems/game_manager_system.h b/include/systems/game_manager_system.h
index 7dc1eb9..1b66c72 100644
--- a/include/systems/game_manager_system.h
+++ b/include/systems/game_manager_system.h
@@ -14,6 +14,7 @@ struct game_manager_system {
gc_system base;
bool is_inventory;
bool has_message;
+ gc_scene *game_scene;
};
extern const struct game_manager_system game_manager_system;
diff --git a/lib/gamacon b/lib/gamacon
index bb88cf8..873f0ce 160000
--- a/lib/gamacon
+++ b/lib/gamacon
@@ -1 +1 @@
-Subproject commit bb88cf88094cb821ebded311af5b04b66cf8476c
+Subproject commit 873f0cef56fb0bdea563a69db1d2667d6ea71c39
diff --git a/prefabs/options.gcprefab b/prefabs/options.gcprefab
index 35e065f..cdfbfa9 100644
--- a/prefabs/options.gcprefab
+++ b/prefabs/options.gcprefab
@@ -11,7 +11,7 @@
-
+
@@ -22,6 +22,10 @@
-
+
+
+
+
+
\ No newline at end of file
diff --git a/prefabs/pause.gcprefab b/prefabs/pause.gcprefab
index 832a889..47bdaf7 100644
--- a/prefabs/pause.gcprefab
+++ b/prefabs/pause.gcprefab
@@ -1,6 +1,7 @@
-
+
+
\ No newline at end of file
diff --git a/src/game_loader.c b/src/game_loader.c
index 486fc74..f77d1f1 100644
--- a/src/game_loader.c
+++ b/src/game_loader.c
@@ -43,6 +43,8 @@ const struct callback callbacks[] = {
{"resolution_up", &resolution_up},
{"framerate_up", &framerate_up},
{"framerate_down", &framerate_down},
+ {"sound_down", &sound_down},
+ {"sound_up", &sound_up},
{"catch", &catch},
{"toggle_pause", &toggle_pause},
{"toggle_inventory", &toggle_inventory},
diff --git a/src/main_menu.c b/src/main_menu.c
index f1852bf..8feceaa 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -5,6 +5,8 @@
** main_menu
*/
+#include
+#include
#include "systems/sfml_renderer_system.h"
#include "components/dialog_holder.h"
#include "components/dialog_holder.h"
@@ -53,6 +55,8 @@ enum gc_mousekeys __)
my_printf("The option scene couldn't be loaded.\n");
return (true);
}
+ GETSYS(engine, game_manager_system)->game_scene = engine->scene;
+ engine->scene = NULL;
engine->change_scene(engine, scene);
entity = engine->scene->get_entity(engine->scene, 50);
if (rend)
@@ -61,13 +65,18 @@ enum gc_mousekeys __)
resolution_set_txt(entity, engine, 0);
entity = engine->scene->get_entity(engine->scene, 52);
framerate_set_text(entity, engine, 0);
+ entity = engine->scene->get_entity(engine->scene, 53);
+ sound_set_text(entity, engine, -1);
return (true);
}
bool goto_main_menu(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
enum gc_mousekeys __)
{
- gc_scene *scene = scene_create(engine, "prefabs/mainmenu.gcprefab");
+ gc_scene *scene = GETSYS(engine, game_manager_system)->game_scene;
+
+ if (!scene)
+ scene = scene_create(engine, "prefabs/mainmenu.gcprefab");
if (!scene) {
engine->should_close = true;
my_printf("The option scene couldn't be loaded.\n");
diff --git a/src/sound.c b/src/sound.c
new file mode 100644
index 0000000..d600dd4
--- /dev/null
+++ b/src/sound.c
@@ -0,0 +1,55 @@
+/*
+** EPITECH PROJECT, 2020
+** Myrpg
+** File description:
+** sound
+*/
+
+#include "entity.h"
+#include "engine.h"
+#include
+#include
+#include "utility.h"
+#include "components/renderer.h"
+#include "systems/sfml_renderer_system.h"
+#include "limits.h"
+
+void sound_set_text(gc_entity *entity, gc_engine *engine, float vol)
+{
+ struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
+ struct renderer *renderer;
+ static char volume[10];
+
+ if (!entity)
+ return;
+ if (vol == -1)
+ vol = sfListener_getGlobalVolume();
+ renderer = GETCMP(entity, renderer);
+ if (!rend || !renderer || renderer->type != GC_TXTREND)
+ return;
+ snprintf(volume, 10, "%.0f", vol);
+ ((gc_text *)renderer->data)->text = volume;
+ renderer->destroy = &text_safe_destroy;
+}
+
+bool sound_down(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
+enum gc_mousekeys __)
+{
+ float vol = sfListener_getGlobalVolume();
+
+ vol = MAX(vol - 5, 0);
+ sfListener_setGlobalVolume(vol);
+ sound_set_text(engine->scene->get_entity(engine->scene, 53), engine, vol);
+ return (true);
+}
+
+bool sound_up(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
+enum gc_mousekeys __)
+{
+ float vol = sfListener_getGlobalVolume();
+
+ vol = MIN(vol + 5, 100);
+ sfListener_setGlobalVolume(vol);
+ sound_set_text(engine->scene->get_entity(engine->scene, 53), engine, vol);
+ return (true);
+}
\ No newline at end of file
diff --git a/src/systems/game_manager_system.c b/src/systems/game_manager_system.c
index 0a1ba4e..b79690e 100644
--- a/src/systems/game_manager_system.c
+++ b/src/systems/game_manager_system.c
@@ -70,6 +70,7 @@ static void ctr(void *system, va_list list)
engine->add_event_listener(engine, "combat_ended", &combat_ended);
this->has_message = false;
this->is_inventory = false;
+ this->game_scene = NULL;
}
static void dtr(void *system, gc_engine *engine)