splash screen more reasonable; resizing now functions as intended;

This commit is contained in:
2018-09-04 04:33:25 -05:00
parent 24dcabfb51
commit eba5459ab3
18 changed files with 126 additions and 88 deletions

View File

@@ -32,7 +32,7 @@ public class RhythmBullet extends Game {
public static final int SPAWN_CIRCLE_RADIUS = 6;
public static int pixels_per_unit;
private boolean initiated;
private boolean resizing;
private boolean resizing, simpleResizeOnce;
private int screenWidth, screenHeight;
public static final String VERSION = "(1.0.0) R1-PreAlpha";
@@ -53,15 +53,25 @@ public class RhythmBullet extends Game {
this.initialScreen = initialScreen;
this.assetPack = assetPack;
this.screenConfiguration = screenConfiguration;
screenConfiguration.queueBorderless(true);
}
@Override
public void create() {
Gdx.app.setLogLevel(Application.LOG_DEBUG);
initialScreen.init();
setScreen(initialScreen);
assetPack.initiateResources();
Gdx.app.setLogLevel(Application.LOG_DEBUG);
screenWidth = Gdx.graphics.getWidth();
screenHeight = Gdx.graphics.getHeight();
initialScreen.init();
initialLoad();
}
private void initialLoad() {
if (initiated) throw new IllegalStateException("Initiation cannot occur more than once.");
simpleResizeOnce = true;
skin = new Skin();
assetPack.initiate();
preferences = Gdx.app.getPreferences("RhythmBullet Preferences");
@@ -84,18 +94,23 @@ public class RhythmBullet extends Game {
assetManager.setLoader(Sound.class, new SoundLoader(genericFileFinder));
rRHandler.setResolution(getPreferences().getInteger("screen-width"), getPreferences().getInteger("screen-height"));
queueAssets();
}
private void initialLoadComplete() {
screenConfiguration.queueBorderless(preferences.getBoolean("borderless", false));
screenWidth = Gdx.graphics.getWidth();
screenHeight = Gdx.graphics.getHeight();
skin.addRegions(assetManager.get("uiskin.atlas", TextureAtlas.class));
pixels_per_unit = (int) (Float.valueOf(screenHeight)/Float.valueOf(WORLD_HEIGHT));
if (getPreferences().getBoolean("fullscreen", true)) {
Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
} else {
Gdx.graphics.setWindowedMode(getPreferences().getInteger("screen-width"), getPreferences().getInteger("screen-height"));
}
assetPack.generateFonts(skin);
assetPack.setupSkin(skin);
assetPack.complete(assetManager);
}
@Override
@@ -110,8 +125,7 @@ public class RhythmBullet extends Game {
Gdx.app.debug("Resize", "Post resize is starting...");
if (skin != null) skin.dispose();
skin = new Skin();
skinAtlas = assetManager.get("uiskin.atlas", TextureAtlas.class);
getSkin().addRegions(skinAtlas);
skin.addRegions(assetManager.get("uiskin.atlas", TextureAtlas.class));
assetPack.generateFonts(skin);
assetPack.setupSkin(skin);
@@ -119,15 +133,14 @@ public class RhythmBullet extends Game {
if (getScreen() instanceof ResizeReadyScreen) {
((ResizeReadyScreen) getScreen()).postAssetLoad();
} else {
throw new IllegalStateException("Cannot perform window resize on a screen that isn't using a resize ready screen.");
throw new IllegalStateException("Cannot perform window resize on a screen that isn't resize ready.");
}
Gdx.app.debug("Resize", "Post resize has ended.");
if (!initiated) {
setScreen(((InitialScreen) initialScreen).createMainScreen(this));
initiated = true;
}
resizing = false;
} else if (!initiated) {
initiated = true;
initialLoadComplete();
setScreen(((InitialScreen) initialScreen).advance(this));
}
return true;
}
@@ -142,6 +155,7 @@ public class RhythmBullet extends Game {
try {
advancedResizeScreen.preAssetLoad();
} catch (NullPointerException cleanScreen) {
Gdx.app.debug("Screen", "clean screen: " + advancedResizeScreen.getClass().getSimpleName());
//Tried to perform pre-asset reload, but had uninitialized objects, meaning this is a new screen, or "clean" screen.
} finally {
advancedResizeScreen.postAssetLoad();
@@ -152,25 +166,30 @@ public class RhythmBullet extends Game {
@Override
public void resize(int width, int height) {
Gdx.app.debug("resize", "Current size:" + screenWidth + "x" + screenHeight + " new size: " + width + "x" + height);
if (width != screenWidth || height != screenHeight) {
screenWidth = Gdx.graphics.getWidth();
screenHeight = Gdx.graphics.getHeight();
if (screenWidth != width || screenHeight != height) {
Gdx.app.debug("resize", "Current size:" + screenWidth + "x" + screenHeight + " new size: " + width + "x" + height);
screenWidth = width;
screenHeight = height;
pixels_per_unit = (int) (Float.valueOf(screenHeight)/Float.valueOf(WORLD_HEIGHT));
Gdx.app.debug("Resize", "Pre-resize is happening. Resizing to " + width + "x" + height);
rRHandler.setResolution(width, height);
if (getScreen() instanceof ResizeReadyScreen) {
((ResizeReadyScreen) getScreen()).preAssetLoad();
} else {
throw new IllegalStateException("Cannot perform window resize on a screen that isn't using a resize ready screen.");
}
preferences.putInteger("screen-width", width);
preferences.putInteger("screen-height", height);
preferences.flush();
resizing = true;
assetManager.clear();
queueAssets();
if (!simpleResizeOnce) {
Gdx.app.debug("Resize", "complex pre-resize is happening. Resizing to " + width + "x" + height);
if (getScreen() instanceof ResizeReadyScreen) {
((ResizeReadyScreen) getScreen()).preAssetLoad();
} else {
throw new IllegalStateException("Cannot perform window resize on a screen that isn't using a resize ready screen.");
}
resizing = true;
assetManager.clear();
queueAssets();
} else {
simpleResizeOnce = false;
}
super.resize(width, height);
}
}

View File

@@ -43,11 +43,11 @@ public class MusicList extends Observable {
}
/**
* Wrapper method that uses async refresh.
* Asynchronous recursive search on music directory.
* Also notifies listeners that are on the main thread.
* @param refresh does a search whether or not path has changed and whether or not this list has searched before this.
*/
public void asyncSearch(boolean refresh) {
public void attemptAsyncSearch(boolean refresh) {
if (refresh) {
notifyObservers(states.LOADING);
if (searchThread != null) {
@@ -62,7 +62,7 @@ public class MusicList extends Observable {
}
} else {
if (!searched || hasChanged()) {
asyncSearch(true);
attemptAsyncSearch(true);
}
}
}

View File

@@ -147,6 +147,10 @@ public class DoubleHorizontalVisualizer implements Disposable {
return y;
}
public void updateMusic() {
pcm.updateMusic();
}
@Override
public void dispose() {
pcm.dispose();

View File

@@ -7,4 +7,6 @@ public interface PCMSystem extends Disposable {
float[] getFrequencyBins();
int getWindowSize();
void updateMusic();
}

View File

@@ -9,7 +9,7 @@ public interface AssetPack extends Disposable {
/**
* Called right after the game instance is created and passed to LWJGL. This method is called once for you to instantiate things for later use but require Libgdx functions.
*/
public void initiateResources();
public void initiate();
/**
* Game manager calls this when it needs to load textures.

View File

@@ -6,11 +6,12 @@ import zero1hd.rhythmbullet.RhythmBullet;
public interface InitialScreen extends ResizeReadyScreen {
/**
* Called when everythings loaded and ready to advance.
* Screen should be created on platform.
* @param gameManager the game manager.
* @return the screen that is created.
*/
public Screen createMainScreen(RhythmBullet gameManager);
public Screen advance(RhythmBullet gameManager);
/**
* Immediately called after the LibGDX instance has been instantiated.

View File

@@ -26,5 +26,5 @@ public interface ScreenConfiguration {
public void setWindowLocation(int x, int y);
public void setWindowBorderless(boolean borderless);
public void queueBorderless(boolean borderless);
}