diff --git a/core/assets/music/editor.mp3 b/core/assets/music/editor.mp3 new file mode 100644 index 0000000000..922d194e5f Binary files /dev/null and b/core/assets/music/editor.mp3 differ diff --git a/core/assets/music/menu.mp3 b/core/assets/music/menu.mp3 new file mode 100644 index 0000000000..b171f126a0 Binary files /dev/null and b/core/assets/music/menu.mp3 differ diff --git a/core/assets/music/menu.ogg b/core/assets/music/menu.ogg deleted file mode 100644 index 2a25d8b61e..0000000000 Binary files a/core/assets/music/menu.ogg and /dev/null differ diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 8d9a4e0c5f..014d170679 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -133,6 +133,7 @@ public class Vars{ public static GlobalData data; public static EntityCollisions collisions; public static DefaultWaves defaultWaves; + public static MusicControl mcont; public static Control control; public static Logic logic; @@ -208,6 +209,7 @@ public class Vars{ state = new GameState(); data = new GlobalData(); + mcont = new MusicControl(); mobile = Core.app.getType() == ApplicationType.Android || Core.app.getType() == ApplicationType.iOS || testMobile; ios = Core.app.getType() == ApplicationType.iOS; diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 852996af6e..cbb6cb4e21 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -168,9 +168,6 @@ public class Control implements ApplicationListener{ Events.on(ZoneConfigureCompleteEvent.class, e -> { ui.hudfrag.showToast(Core.bundle.format("zone.config.complete", e.zone.configureWave)); }); - - Musics.menu.setLooping(true); - // Musics.menu.play(); } void createPlayer(){ @@ -312,6 +309,19 @@ public class Control implements ApplicationListener{ //autosave global data if it's modified data.checkSave(); + if(state.is(State.menu)){ + if(ui.deploy.isShown()){ + mcont.silence(); //TODO deploy music + }else if(ui.editor.isShown()){ + mcont.play(Musics.editor); + }else{ + mcont.play(Musics.menu); + } + }else{ + //TODO game music + mcont.silence(); + } + if(!state.is(State.menu)){ input.update(); diff --git a/core/src/io/anuke/mindustry/game/MusicControl.java b/core/src/io/anuke/mindustry/game/MusicControl.java index 2409045cdb..567ee637ab 100644 --- a/core/src/io/anuke/mindustry/game/MusicControl.java +++ b/core/src/io/anuke/mindustry/game/MusicControl.java @@ -1,4 +1,39 @@ package io.anuke.mindustry.game; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.audio.*; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; + public class MusicControl{ + private static final float finTime = 80f, foutTime = 80f; + private @Nullable Music current; + + public void play(@Nullable Music music){ + if(current == null && music != null){ + current = music; + current.setLooping(true); + current.setVolume(0f); + current.play(); + }else if(current == music && music != null){ + current.setVolume(Mathf.clamp(current.getVolume() + Time.delta()/finTime)); + }else if(current != null){ + current.setVolume(Mathf.clamp(current.getVolume() - Time.delta()/foutTime)); + + if(current.getVolume() <= 0.01f){ + current.stop(); + current = null; + if(music != null){ + current = music; + current.setVolume(0f); + current.setLooping(true); + current.play(); + } + } + } + } + + public void silence(){ + play(null); + } }