From f523328cb320f406251373716d91c876774058e2 Mon Sep 17 00:00:00 2001 From: yugecin Date: Sat, 21 Jan 2017 14:31:03 +0100 Subject: [PATCH] change skin on the fly --- src/itdelatrisu/opsu/Options.java | 2 ++ .../opsudance/core/DisplayContainer.java | 21 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/itdelatrisu/opsu/Options.java b/src/itdelatrisu/opsu/Options.java index 8f1f7f3e..d34312d3 100644 --- a/src/itdelatrisu/opsu/Options.java +++ b/src/itdelatrisu/opsu/Options.java @@ -376,6 +376,8 @@ public class Options { @Override public void clickListItem(int index) { skinName = skinDirs[index]; + loadSkin(); + EventBus.instance.post(new ResolutionChangedEvent(DisplayContainer.instance.width, DisplayContainer.instance.height)); } @Override diff --git a/src/yugecin/opsudance/core/DisplayContainer.java b/src/yugecin/opsudance/core/DisplayContainer.java index ba782b9a..b4d0a0a5 100644 --- a/src/yugecin/opsudance/core/DisplayContainer.java +++ b/src/yugecin/opsudance/core/DisplayContainer.java @@ -40,6 +40,7 @@ import org.newdawn.slick.opengl.renderer.SGL; import org.newdawn.slick.util.Log; import yugecin.opsudance.core.events.EventBus; import yugecin.opsudance.core.errorhandling.ErrorDumpable; +import yugecin.opsudance.core.events.EventListener; import yugecin.opsudance.core.inject.InstanceContainer; import yugecin.opsudance.core.state.OpsuState; import yugecin.opsudance.core.state.specialstates.BarNotificationState; @@ -141,6 +142,13 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen } }; + eventBus.subscribe(ResolutionChangedEvent.class, new EventListener() { + @Override + public void onEvent(ResolutionChangedEvent event) { + destroyImages(); + } + }); + this.nativeDisplayMode = Display.getDisplayMode(); setUPS(1000); setFPS(60); @@ -241,12 +249,16 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen } public void teardown() { + destroyImages(); + CurveRenderState.shutdown(); + Display.destroy(); + } + + public void destroyImages() { InternalTextureLoader.get().clear(); GameImage.destroyImages(); GameData.Grade.destroyImages(); Beatmap.destroyBackgroundImageCache(); - CurveRenderState.shutdown(); - Display.destroy(); } public void teardownAL() { @@ -321,11 +333,6 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen } private void initGL() throws Exception { - InternalTextureLoader.get().clear(); - GameImage.destroyImages(); - GameData.Grade.destroyImages(); - Beatmap.destroyBackgroundImageCache(); - GL.initDisplay(width, height); GL.enterOrtho(width, height);