From bf9ebf6b8da05b0e344e5c4c9373e1d50f42f413 Mon Sep 17 00:00:00 2001
From: Ragot mathis <5OLE1L@localhost.localdomain>
Date: Sun, 3 May 2020 17:35:42 +0200
Subject: [PATCH] add sound
---
Makefile | 3 +-
include/setup.h | 5 +++
prefabs/options.gcprefab | 8 +++-
src/game_loader.c | 2 +
src/sound.c | 89 ++++++++++++++++++++++++++++++++++++++++
5 files changed, 104 insertions(+), 3 deletions(-)
create mode 100644 src/sound.c
diff --git a/Makefile b/Makefile
index dd5e272..4a335b5 100644
--- a/Makefile
+++ b/Makefile
@@ -44,7 +44,8 @@ SRC = src/main.c \
src/systems/game_over.c \
src/npc/mia.c \
src/npc/fisherman.c \
- src/npc/lumberjack.c
+ src/npc/lumberjack.c \
+ src/sound.c
OBJ = $(SRC:%.c=%.o)
diff --git a/include/setup.h b/include/setup.h
index 2dd336e..178e068 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);
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/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/src/game_loader.c b/src/game_loader.c
index a71807f..1c02a43 100644
--- a/src/game_loader.c
+++ b/src/game_loader.c
@@ -41,6 +41,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/sound.c b/src/sound.c
new file mode 100644
index 0000000..e68430d
--- /dev/null
+++ b/src/sound.c
@@ -0,0 +1,89 @@
+/*
+** EPITECH PROJECT, 2020
+** Myrpg
+** File description:
+** sound
+*/
+
+#include "entity.h"
+#include "engine.h"
+#include
+#include "utility.h"
+#include "components/renderer.h"
+#include "systems/sfml_renderer_system.h"
+#include "limits.h"
+
+static const float sound[] = {
+ 0,
+ 5,
+ 10,
+ 15,
+ 20,
+ 25,
+ 30,
+ 35,
+ 40,
+ 45,
+ 50,
+ 55,
+ 60,
+ 65,
+ 70,
+ 75,
+ 80,
+ 85,
+ 90,
+ 95,
+ 100,
+ INT_MAX
+};
+
+void sound_set_text(gc_entity *entity, gc_engine *engine)
+{
+ struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
+ struct renderer *renderer;
+ char *volume;
+
+ if (!entity)
+ return;
+ renderer = GETCMP(entity, renderer);
+ if (!rend || !renderer || renderer->type != GC_TXTREND)
+ return;
+ volume = tostr(rend->sound);
+ free(((gc_text *)renderer->data)->text);
+ ((gc_text *)renderer->data)->text = volume;
+}
+
+bool sound_down(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
+enum gc_mousekeys __)
+{
+ struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
+ int i = 2;
+
+ if (!rend || rend->is_fullscreen)
+ return (false);
+ while (i > 0 && sound[i] >= rend->sound)
+ i--;
+ sfListener_setGlobalVolume(sound[i]);
+ rend->sound = sound[i];
+ sound_set_text(engine->scene->get_entity(engine->scene, 53), engine);
+ return (true);
+}
+
+bool sound_up(gc_engine *engine, gc_entity *entity, gc_vector2 _, \
+enum gc_mousekeys __)
+{
+ struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
+ int i = 0;
+
+ if (!rend || rend->is_fullscreen)
+ return (false);
+ while (sound[i] <= rend->sound)
+ i++;
+ if (sound[i] == INT_MAX)
+ return (true);
+ sfListener_setGlobalVolume(sound[i]);
+ rend->sound = sound[i];
+ sound_set_text(engine->scene->get_entity(engine->scene, 53), engine);
+ return (true);
+}
\ No newline at end of file