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 f14d7e8..9fbf385 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java @@ -6,6 +6,7 @@ import org.vibecoders.moongazer.Game; import org.vibecoders.moongazer.State; import org.vibecoders.moongazer.managers.Assets; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; @@ -17,8 +18,8 @@ import com.badlogic.gdx.utils.ScreenUtils; public class Intro extends Scene { private Texture logo; private Game game; - private long startTime; - private long endTime = 0; + private float totalTime = 0; + private boolean end = false; /** * Initializes the intro scene, starts loading assets. @@ -26,7 +27,6 @@ public class Intro extends Scene { public Intro(Game game) { this.game = game; logo = Assets.getAsset("icons/logo.png", Texture.class); - startTime = System.currentTimeMillis() + 500; log.info("Starting to load all remaining assets..."); Assets.loadAll(); // Create scenes @@ -42,7 +42,9 @@ public class Intro extends Scene { */ @Override public void render(SpriteBatch batch) { - if (System.currentTimeMillis() > endTime + 2000 && endTime != 0) { + totalTime += Gdx.graphics.getDeltaTime(); + log.trace("Intro total time: {}", totalTime); + if (totalTime > 5f) { if (game.transition == null) { Assets.waitUntilLoaded(); log.info("All assets loaded successfully."); @@ -53,12 +55,12 @@ public class Intro extends Scene { } ScreenUtils.clear(Color.BLACK); // log.debug("Rendering logo at position: ({}, {})", WINDOW_WIDTH / 2 - logo.getWidth() / 4, WINDOW_HEIGHT / 2 - logo.getHeight() / 4); - var currentOpacity = (float) (System.currentTimeMillis() - startTime) / 1000; + var currentOpacity = totalTime; if (currentOpacity > 1) { - if (endTime == 0) { - endTime = System.currentTimeMillis() + 2000; + if (!end) { + end = true; } - currentOpacity = 1 - ((float) (System.currentTimeMillis() - endTime) / 1000); + currentOpacity = 5f - totalTime; } // Multiply with any externally applied alpha (e.g., Transition) float externalAlpha = batch.getColor().a; 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 43f0400..484706e 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java @@ -18,6 +18,7 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; +import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.video.VideoPlayer; import com.badlogic.gdx.video.VideoPlayerCreator; @@ -133,7 +134,7 @@ public class MainMenu extends Scene { @Override public boolean keyDown(InputEvent event, int keycode) { sKeyDown(event, keycode); - currentKeyDown.put(keycode, System.currentTimeMillis()); + currentKeyDown.put(keycode, TimeUtils.millis()); return true; } }); @@ -201,9 +202,9 @@ public class MainMenu extends Scene { for (Map.Entry entry : currentKeyDown.entrySet()) { Integer keyCode = entry.getKey(); Long timeStamp = entry.getValue(); - if (System.currentTimeMillis() - timeStamp > 100) { + if (TimeUtils.millis() - timeStamp > 100) { sKeyDown(null, keyCode); - currentKeyDown.put(keyCode, System.currentTimeMillis()); + currentKeyDown.put(keyCode, TimeUtils.millis()); } } startVideoOnce(); diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/Transition.java b/app/src/main/java/org/vibecoders/moongazer/scenes/Transition.java index c490921..db091d8 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/Transition.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/Transition.java @@ -3,6 +3,7 @@ package org.vibecoders.moongazer.scenes; import org.vibecoders.moongazer.Game; import org.vibecoders.moongazer.State; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.SpriteBatch; /** @@ -12,15 +13,16 @@ public class Transition extends Scene { private Scene from; private Scene to; private State targetState; - private long startTime; + private float totalTime = 0f; private long duration; /** * Creates a new transition between two scenes. - * @param from The scene to transition from. - * @param to The scene to transition to. + * + * @param from The scene to transition from. + * @param to The scene to transition to. * @param targetState The target state of the game after the transition. - * @param duration The duration of the transition in milliseconds. + * @param duration The duration of the transition in milliseconds. */ public Transition(Game game, Scene from, Scene to, State targetState, long duration) { // Transition does not need to render UI elements @@ -30,16 +32,17 @@ public class Transition extends Scene { this.to = to; this.targetState = targetState; this.duration = duration; - startTime = System.currentTimeMillis(); } /** * Renders the transition effect. + * * @param batch The SpriteBatch to draw with. */ @Override public void render(SpriteBatch batch) { - var toOpacity = ((float) (System.currentTimeMillis() - startTime)) / duration; + totalTime += Gdx.graphics.getDeltaTime(); + var toOpacity = totalTime / (((float) duration) / 1000); if (toOpacity >= 0.99) { log.trace("Transition complete to state: {}", targetState); game.state = targetState;