diff --git a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java index d10f8d2..5f24b37 100644 --- a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java +++ b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java @@ -25,6 +25,7 @@ public class Assets { private static final HashMap loadedFiles = new HashMap<>(); private static boolean startLoadAll = false; private static boolean loadedAll = false; + private static Thread loadingThread = null; private static Texture textureWhite; private static Texture textureBlack; @@ -119,8 +120,14 @@ public class Assets { assetManager.load("textures/ui/UI_Gcg_Icon_Close.png", Texture.class); assetManager.load("textures/ui/arrow-button-left.png", Texture.class); assetManager.load("textures/ui/arrow-button-right.png", Texture.class); + assetManager.load("textures/ui/close.png", Texture.class); + assetManager.load("textures/ui/close_hover.png", Texture.class); + assetManager.load("textures/ui/close_clicked.png", Texture.class); // "Load" unsupported file types as FileHandle - loadAny("videos/main_menu_background.webm"); + loadingThread = new Thread(() -> { + loadAny("videos/main_menu_background.webm"); + }); + loadingThread.start(); } public static boolean isLoadedAll() { @@ -133,6 +140,14 @@ public class Assets { public static void waitUntilLoaded() { assetManager.finishLoading(); + if (loadingThread != null) { + try { + loadingThread.join(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + loadingThread = null; + } if (startLoadAll) { loadedAll = true; } diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java b/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java index a2c385a..9564d9e 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java @@ -16,7 +16,7 @@ import org.vibecoders.moongazer.Game; import org.vibecoders.moongazer.State; import org.vibecoders.moongazer.Settings; import org.vibecoders.moongazer.managers.Assets; -import org.vibecoders.moongazer.ui.UIImageButton; +import org.vibecoders.moongazer.ui.UICloseButton; import org.vibecoders.moongazer.ui.UITextButton; import java.util.HashMap; @@ -102,7 +102,7 @@ public class SettingsScene extends Scene { mainPanel.row(); // Back button - UIImageButton backButton = new UIImageButton("textures/ui/UI_Gcg_Icon_Close.png"); + UICloseButton backButton = new UICloseButton(); backButton.setSize(40, 40); backButton.setPosition(Gdx.graphics.getWidth() - 80, Gdx.graphics.getHeight() - 80); backButton.onClick(() -> { diff --git a/app/src/main/java/org/vibecoders/moongazer/ui/UICloseButton.java b/app/src/main/java/org/vibecoders/moongazer/ui/UICloseButton.java new file mode 100644 index 0000000..32d7148 --- /dev/null +++ b/app/src/main/java/org/vibecoders/moongazer/ui/UICloseButton.java @@ -0,0 +1,24 @@ +package org.vibecoders.moongazer.ui; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; +import org.vibecoders.moongazer.managers.Assets; + +public class UICloseButton extends UIButton { + public UICloseButton() { + Texture closeTexture = Assets.getAsset("textures/ui/close.png", Texture.class); + Texture closeHoverTexture = Assets.getAsset("textures/ui/close_hover.png", Texture.class); + Texture closeClickTexture = Assets.getAsset("textures/ui/close_clicked.png", Texture.class); + TextureRegionDrawable drawable = new TextureRegionDrawable(new TextureRegion(closeTexture)); + TextureRegionDrawable hoverDrawable = new TextureRegionDrawable(new TextureRegion(closeHoverTexture)); + TextureRegionDrawable clickDrawable = new TextureRegionDrawable(new TextureRegion(closeClickTexture)); + ImageButton.ImageButtonStyle style = new ImageButton.ImageButtonStyle(); + style.imageUp = drawable; + style.imageDown = clickDrawable; + style.imageOver = hoverDrawable; + this.button = new ImageButton(style); + this.actor = button; + } +} diff --git a/app/src/main/resources/textures/ui/close.png b/app/src/main/resources/textures/ui/close.png new file mode 100644 index 0000000..fa239b9 Binary files /dev/null and b/app/src/main/resources/textures/ui/close.png differ diff --git a/app/src/main/resources/textures/ui/close_clicked.png b/app/src/main/resources/textures/ui/close_clicked.png new file mode 100644 index 0000000..a6fbfe9 Binary files /dev/null and b/app/src/main/resources/textures/ui/close_clicked.png differ diff --git a/app/src/main/resources/textures/ui/close_hover.png b/app/src/main/resources/textures/ui/close_hover.png new file mode 100644 index 0000000..1f6928f Binary files /dev/null and b/app/src/main/resources/textures/ui/close_hover.png differ