diff --git a/assets/80-search-intro.wav b/assets/80-search-intro.wav new file mode 100644 index 0000000..9ba1dfe Binary files /dev/null and b/assets/80-search-intro.wav differ diff --git a/assets/80-search-loop.wav b/assets/80-search-loop.wav new file mode 100644 index 0000000..601c57e Binary files /dev/null and b/assets/80-search-loop.wav differ diff --git a/src/main/java/com/fmudanyali/Audio.java b/src/main/java/com/fmudanyali/Audio.java new file mode 100644 index 0000000..8abd554 --- /dev/null +++ b/src/main/java/com/fmudanyali/Audio.java @@ -0,0 +1,77 @@ +package com.fmudanyali; + +import javax.sound.sampled.Clip; +import javax.sound.sampled.UnsupportedAudioFileException; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; + +import java.util.LinkedList; +import java.util.Queue; + +import java.io.File; +import java.io.IOException; + +public class Audio { + private static Queue audioQueue = new LinkedList(); + private static Clip clip; + + public static void init() throws Exception{ + clip = AudioSystem.getClip(); + Thread thread = new Thread(){ + public void run(){ + String current = new String(); + while(!Main.exit){ + if(audioQueue.isEmpty()){ + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else{ + if(audioQueue.size() == 1){ + clip.loop(Clip.LOOP_CONTINUOUSLY); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + clip.loop(0); + } + if(current != audioQueue.peek()){ + current = audioQueue.peek(); + try { + addAudio(current); + Thread.sleep(500); + } catch (Exception e) { + e.printStackTrace(); + } + } + if(clip.getMicrosecondLength() == clip.getMicrosecondPosition() && audioQueue.size() > 1){ + audioQueue.remove(); + } + } + } + } + }; + thread.start(); + } + + public static void playAudio(String file) throws Exception{ + File f = new File(FileLoader.getFilePath(file)); + AudioInputStream audioIn = AudioSystem.getAudioInputStream(f.toURI().toURL()); + clip.open(audioIn); + clip.start(); + } + + private static void addAudio(String file) throws Exception{ + File f = new File(FileLoader.getFilePath(file)); + AudioInputStream audioIn = AudioSystem.getAudioInputStream(f.toURI().toURL()); + clip.close(); + clip.open(audioIn); + } + + public static void queueAudio(String file){ + audioQueue.add(file); + } +} \ No newline at end of file diff --git a/src/main/java/com/fmudanyali/Main.java b/src/main/java/com/fmudanyali/Main.java index 7d07f9a..c178211 100644 --- a/src/main/java/com/fmudanyali/Main.java +++ b/src/main/java/com/fmudanyali/Main.java @@ -31,6 +31,7 @@ public class Main { } Render.init(); Screen.init(); + Audio.init(); scenes.push(new MainMenu()); while(!scenes.empty() && !exit){ @@ -38,5 +39,6 @@ public class Main { Keyboard.getKeyboardState(); scenes.peek().loop(); } + exit = true; } } \ No newline at end of file diff --git a/src/main/java/com/fmudanyali/scenes/Game.java b/src/main/java/com/fmudanyali/scenes/Game.java index 934fcbf..9a5ee31 100644 --- a/src/main/java/com/fmudanyali/scenes/Game.java +++ b/src/main/java/com/fmudanyali/scenes/Game.java @@ -20,6 +20,7 @@ package com.fmudanyali.scenes; import com.fmudanyali.Main; import com.fmudanyali.Screen; import com.fmudanyali.characters.Player; +import com.fmudanyali.Audio; import static org.libsdl.api.event.SdlEvents.*; import static com.fmudanyali.Render.*; @@ -34,6 +35,8 @@ public class Game extends Scene { public Game() throws Exception{ Screen.makeBackground("scene1/tile.bmp"); + Audio.queueAudio("80-search-intro.wav"); + Audio.queueAudio("80-search-loop.wav"); } @Override @@ -65,11 +68,6 @@ public class Game extends Scene { player.movement(); Screen.scroll(); - ++kek; - if(kek == 60){ - System.out.println(escPressed); - kek = 0; - } SDL_RenderClear(renderer); SDL_RenderCopy(renderer, Screen.wallpaper, null, null);