From 7d9a1f109f7edd6411b6e695098b0dd5450a9aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Th=E1=BA=BF=20H=C6=B0ng?= Date: Tue, 30 Sep 2025 12:26:33 +0700 Subject: [PATCH] chore(assets): move black & white texture to Assets --- .../org/vibecoders/moongazer/Constants.java | 8 ---- .../vibecoders/moongazer/managers/Assets.java | 48 ++++++++++++++++++- .../vibecoders/moongazer/scenes/Intro.java | 2 +- .../vibecoders/moongazer/scenes/MainMenu.java | 2 +- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/vibecoders/moongazer/Constants.java b/app/src/main/java/org/vibecoders/moongazer/Constants.java index 4040289..4fc6b71 100644 --- a/app/src/main/java/org/vibecoders/moongazer/Constants.java +++ b/app/src/main/java/org/vibecoders/moongazer/Constants.java @@ -16,12 +16,4 @@ public class Constants { public static final int WINDOW_WIDTH = 1280; public static final int WINDOW_HEIGHT = 720; public static final String WINDOW_TITLE = "Moongazer"; - public static final Texture TEXTURE_WHITE = new Texture(new Pixmap(1, 1, Pixmap.Format.RGBA8888) {{ - setColor(Color.WHITE); - fill(); - }}); - public static final Texture TEXTURE_BLACK = new Texture(new Pixmap(1, 1, Pixmap.Format.RGBA8888) {{ - setColor(Color.BLACK); - fill(); - }}); } 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 2d03666..2b50b65 100644 --- a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java +++ b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java @@ -5,6 +5,8 @@ import org.slf4j.Logger; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.FileHandleResolver; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader; @@ -19,9 +21,21 @@ public class Assets { private static final ArrayList loadedFonts = new ArrayList<>(); private static boolean startLoadAll = false; private static boolean loadedAll = false; + private static Texture textureWhite; + private static Texture textureBlack; public static T getAsset(String fileName, Class type) { - return assetManager.get(fileName, type); + try { + if (!assetManager.isLoaded(fileName, type)) { + log.warn("Asset not loaded: {}", fileName); + assetManager.load(fileName, type); + assetManager.finishLoadingAsset(fileName); + } + return assetManager.get(fileName, type); + } catch (Exception e) { + log.error("Failed to load asset: {}", fileName, e); + throw new RuntimeException("Asset loading failed: " + fileName, e); + } } /** @@ -57,6 +71,8 @@ public class Assets { */ public static void loadIntroAndWait() { assetManager.load("icons/logo.png", Texture.class); + getBlackTexture(); + getWhiteTexture(); waitUntilLoaded(); } @@ -92,7 +108,37 @@ public class Assets { return assetManager; } + public static Texture getWhiteTexture() { + if (textureWhite == null) { + Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pixmap.setColor(Color.WHITE); + pixmap.fill(); + textureWhite = new Texture(pixmap); + pixmap.dispose(); // Important: dispose pixmap after creating texture + } + return textureWhite; + } + + public static Texture getBlackTexture() { + if (textureBlack == null) { + Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + pixmap.setColor(Color.BLACK); + pixmap.fill(); + textureBlack = new Texture(pixmap); + pixmap.dispose(); + } + return textureBlack; + } + public static void dispose() { assetManager.dispose(); + if (textureWhite != null) { + textureWhite.dispose(); + textureWhite = null; + } + if (textureBlack != null) { + textureBlack.dispose(); + textureBlack = null; + } } } diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java b/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java index 028b8b4..a0ca145 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java @@ -45,7 +45,7 @@ public class Intro extends Scene { log.info("All assets loaded successfully."); game.transition = new Transition(game, this, game.mainMenuScene, State.MAIN_MENU, 1000); } - batch.draw(TEXTURE_BLACK, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); + batch.draw(Assets.getBlackTexture(), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); return; } ScreenUtils.clear(Color.BLACK); diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java index ea075fe..86b21c4 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java @@ -30,7 +30,7 @@ public class MainMenu extends Scene { */ @Override public void render(SpriteBatch batch) { - batch.draw(TEXTURE_WHITE, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); + batch.draw(Assets.getWhiteTexture(), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); // Unneeded as using Scene2D Stage to render the label // textLabel.draw(batch, 1.0f); }