From 18744e8894e721907675f06685dba65f151c7150 Mon Sep 17 00:00:00 2001
From: Joakim Hunskaar <joakim.borge.hunskar@gmail.com>
Date: Fri, 11 Apr 2025 17:29:43 +0200
Subject: [PATCH] simpler audio API

---
 .../animationwindow/include/AnimationWindow.h          |  2 +-
 .../subprojects/animationwindow/include/Audio.h        |  2 +-
 .../animationwindow/src/AnimationWindow.cpp            |  4 ++--
 dependencies/subprojects/animationwindow/src/Audio.cpp | 10 +++++++---
 4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/dependencies/subprojects/animationwindow/include/AnimationWindow.h b/dependencies/subprojects/animationwindow/include/AnimationWindow.h
index 77d299a..7fcde36 100644
--- a/dependencies/subprojects/animationwindow/include/AnimationWindow.h
+++ b/dependencies/subprojects/animationwindow/include/AnimationWindow.h
@@ -132,6 +132,6 @@ class AnimationWindow {
     float get_delta_mouse_wheel() const;
 
     // 
-    void play_audio(TDT4102::Audio& audio, bool loop = false, int repeat = 0);
+    void play_audio(TDT4102::Audio& audio, int loops = 0);
 };
 }  // namespace TDT4102
diff --git a/dependencies/subprojects/animationwindow/include/Audio.h b/dependencies/subprojects/animationwindow/include/Audio.h
index c4c2579..44324bb 100644
--- a/dependencies/subprojects/animationwindow/include/Audio.h
+++ b/dependencies/subprojects/animationwindow/include/Audio.h
@@ -24,6 +24,6 @@ namespace TDT4102 {
         std::filesystem::path src = "non existent file";
 
         void load();
-        void play(bool loop, int repeat); // 0 is for play once and stop
+        void play(int loops = 0);
     };
 }
diff --git a/dependencies/subprojects/animationwindow/src/AnimationWindow.cpp b/dependencies/subprojects/animationwindow/src/AnimationWindow.cpp
index 37e4650..ea8158e 100644
--- a/dependencies/subprojects/animationwindow/src/AnimationWindow.cpp
+++ b/dependencies/subprojects/animationwindow/src/AnimationWindow.cpp
@@ -416,7 +416,7 @@ void TDT4102::AnimationWindow::setBackgroundColor(TDT4102::Color newBackgroundCo
     SDL_RenderClear(rendererHandle);
 }
 
-void TDT4102::AnimationWindow::play_audio(TDT4102::Audio& audio, bool loop, int repeat) {
-    audio.play(loop, repeat);
+void TDT4102::AnimationWindow::play_audio(TDT4102::Audio& audio, int loops) {
+    audio.play(loops);
 }
 
diff --git a/dependencies/subprojects/animationwindow/src/Audio.cpp b/dependencies/subprojects/animationwindow/src/Audio.cpp
index 056251a..b335210 100644
--- a/dependencies/subprojects/animationwindow/src/Audio.cpp
+++ b/dependencies/subprojects/animationwindow/src/Audio.cpp
@@ -35,15 +35,19 @@ void TDT4102::Audio::load() {
     
 }
 
-void TDT4102::Audio::play(bool loop, int repeat) {
+void TDT4102::Audio::play(int loops) {
+
+    if (loops < 0) {
+        throw std::runtime_error("Number of loops must be positive!");
+    }
     
     if(!ready) {
         load();
     }
     if (isMusic) {
-        Mix_PlayMusic(mus, loop ? -1 : repeat);
+        Mix_PlayMusic(mus, loops == 0 ? loops : loops--);
     } else {
-        Mix_PlayChannel(-1, sfx, loop ? -1 : repeat);
+        Mix_PlayChannel(-1, sfx, loops == 0 ? loops-- : loops);
     }
     
     
-- 
GitLab