I'm glad to announce that the codename for the FastTeam's entry is SpaceFloat and it will be a game about a delivery service in the space!
I'm going to continue these devlogs writing about some practices I use with libGDX. So, here is a devlog about the SpaceFloat screen management.
SpaceFloat Screen Management
You could see a better formatted version of this devlog at this link.
SpaceFloat is divided in well-defined screens encapsulated in the ScreenEnumerator, so it's very simple to retrieve a singleton of a screen:
ScreenEnumerator.INFO.getScreen();.
public enum ScreenEnumerator {
INFO(new InfoScreen()),
MAIN(new MainScreen()),
LOADING(new LoadingScreen());
private SpaceFloatScreen screen;
ScreenEnumerator(SpaceFloatScreen screen) {
this.screen = screen;
}
public SpaceFloatScreen getScreen() {
return screen;
}
}
The SpaceFloatGame class, subclass of
Game, is responsible of the application life-cycle, including the current screen. A screen is initialized within the method setScreen(ScreenEnumerator) which, if the screen is not yet initialized, will invoke injectDependencies(SpaceFloatScreen) to inject all required dependencies.
public void setScreen(ScreenEnumerator screenEnumerator) {
SpaceFloatScreen screen = screenEnumerator.getScreen();
if (!screen.isInitialized()) injectDependencies(screen);
setScreen(screen);
}
private void injectDependencies(SpaceFloatScreen screen) {
screen.setAssetManager(assetManager);
screen.setFont(font);
screen.setEngine(engine);
screen.setGame(this);
screen.setInitialized(true);
}