From 511c3148e7a1f35486392c5bdbe0517f38eb15ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz> Date: Mon, 9 Feb 2015 17:21:34 +0100 Subject: [PATCH] #7 Generic screen data loader --- core/src/cz/nic/tablexia/Tablexia.java | 12 +++---- .../cz/nic/tablexia/TablexiaApplication.java | 32 +++++++++--------- .../cz/nic/tablexia/game/GameDefinition.java | 6 ++-- .../game/games/robbery/DebugScreen.java | 2 +- .../game/games/robbery/GameScreen.java | 2 +- .../game/games/robbery/RuleScreen.java | 2 +- .../screen/AbstractTablexiaScreen.java | 33 ++++++++++++++++++- .../cz/nic/tablexia/screen/LoaderScreen.java | 2 +- .../nic/tablexia/screen/ScreenDefinition.java | 8 ++--- .../tablexia/screen/about/AboutScreen.java | 2 +- .../encyclopedia/EncyclopediaScreen.java | 2 +- .../screen/gamemenu/GameMenuScreen.java | 2 +- .../screen/halloffame/HallOfFameScreen.java | 2 +- .../screen/statistics/StatisticsScreen.java | 2 +- 14 files changed, 70 insertions(+), 39 deletions(-) diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java index 114f83b1c..35f18a720 100644 --- a/core/src/cz/nic/tablexia/Tablexia.java +++ b/core/src/cz/nic/tablexia/Tablexia.java @@ -104,15 +104,15 @@ public class Tablexia extends TablexiaApplication { public static class ChangeScreenEvent implements ApplicationEvent { - private Class<? extends AbstractTablexiaScreen> screen; - private ScreenTransaction screenTransaction; + private Class<? extends AbstractTablexiaScreen<?>> screen; + private ScreenTransaction screenTransaction; - public ChangeScreenEvent(Class<? extends AbstractTablexiaScreen> screen, ScreenTransaction screenTransaction) { + public ChangeScreenEvent(Class<? extends AbstractTablexiaScreen<?>> screen, ScreenTransaction screenTransaction) { this.screen = screen; this.screenTransaction = screenTransaction; } - public Class<? extends AbstractTablexiaScreen> getScreen() { + public Class<? extends AbstractTablexiaScreen<?>> getScreen() { return screen; } @@ -123,7 +123,7 @@ public class Tablexia extends TablexiaApplication { @Handler public void handleChangeScreenEvent(final ChangeScreenEvent changeScreenEvent) { - final Class<? extends AbstractTablexiaScreen> screenClass = changeScreenEvent.getScreen(); + final Class<? extends AbstractTablexiaScreen<?>> screenClass = changeScreenEvent.getScreen(); if (!loadingComplete) { Log.err(getClass(), "Cannot change screen -> Application loading not complete!"); return; @@ -138,7 +138,7 @@ public class Tablexia extends TablexiaApplication { @Override public void run() { try { - AbstractTablexiaScreen screen = (AbstractTablexiaScreen) ClassReflection.getConstructors(screenClass)[0].newInstance(new Object[]{}); + AbstractTablexiaScreen<?> screen = (AbstractTablexiaScreen<?>) ClassReflection.getConstructors(screenClass)[0].newInstance(new Object[]{}); setScreenIfIsDifferent(screen, changeScreenEvent.getScreenTransaction()); } catch (ReflectionException e) { Log.err(getClass(), "Cannot change screen! (Do you have only one parameter less constructor in screen?)", e); diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java index 5959f6491..4ba8b2a2e 100644 --- a/core/src/cz/nic/tablexia/TablexiaApplication.java +++ b/core/src/cz/nic/tablexia/TablexiaApplication.java @@ -32,10 +32,10 @@ public abstract class TablexiaApplication implements ApplicationListener { private static final Color BACKGROUND_COLOR = new Color(0f, 0f, 0f, 1f); - private AbstractTablexiaScreen lastScreen; - private AbstractTablexiaScreen screen; - private InputMultiplexer inputMultiplexer; - private Stage stage; + private AbstractTablexiaScreen<?> lastScreen; + private AbstractTablexiaScreen<?> screen; + private InputMultiplexer inputMultiplexer; + private Stage stage; public Stage getStage() { @@ -107,7 +107,7 @@ public abstract class TablexiaApplication implements ApplicationListener { * * @param screen new screen to change for */ - public void setScreenIfIsDifferent (AbstractTablexiaScreen screen) { + public void setScreenIfIsDifferent (AbstractTablexiaScreen<?> screen) { if (getScreen() == null || getScreen().getClass() != screen.getClass()) { setScreen(screen); } @@ -118,7 +118,7 @@ public abstract class TablexiaApplication implements ApplicationListener { * * @param screen new screen to change for */ - public void setScreen (AbstractTablexiaScreen screen) { + public void setScreen (AbstractTablexiaScreen<?> screen) { processLastScreen(this.screen); this.screen = screen; processNewScreen(this.screen); @@ -132,7 +132,7 @@ public abstract class TablexiaApplication implements ApplicationListener { * @param newScreen new screen to change for * @param screenTransaction screen transaction type */ - public void setScreenIfIsDifferent (AbstractTablexiaScreen newScreen, ScreenTransaction screenTransaction) { + public void setScreenIfIsDifferent (AbstractTablexiaScreen<?> newScreen, ScreenTransaction screenTransaction) { if (getScreen() == null || getScreen().getClass() != newScreen.getClass()) { setScreen(newScreen, screenTransaction); } @@ -145,7 +145,7 @@ public abstract class TablexiaApplication implements ApplicationListener { * @param newScreen new screen to change for * @param screenTransaction screen transaction type */ - public void setScreen (final AbstractTablexiaScreen newScreen, ScreenTransaction screenTransaction) { + public void setScreen (final AbstractTablexiaScreen<?> newScreen, ScreenTransaction screenTransaction) { if (screenTransaction == null) { setScreen(newScreen); } else { @@ -182,11 +182,11 @@ public abstract class TablexiaApplication implements ApplicationListener { * * @return current screen */ - public AbstractTablexiaScreen getScreen () { + public AbstractTablexiaScreen<?> getScreen () { return screen; } - private void processNewScreen(AbstractTablexiaScreen newScreen) { + private void processNewScreen(AbstractTablexiaScreen<?> newScreen) { if (newScreen != null) { inputMultiplexer.addProcessor(newScreen.getStage()); newScreen.show(); @@ -194,7 +194,7 @@ public abstract class TablexiaApplication implements ApplicationListener { } } - private void processLastScreen(AbstractTablexiaScreen lastScreen) { + private void processLastScreen(AbstractTablexiaScreen<?> lastScreen) { if (lastScreen != null) { inputMultiplexer.removeProcessor(lastScreen.getStage()); lastScreen.hide(); @@ -213,7 +213,7 @@ public abstract class TablexiaApplication implements ApplicationListener { FADE (new FadeAnimation()); private interface ScreenTransactionImplementation { - public void processTransaction(Stage stage, AbstractTablexiaScreen lastScreen, AbstractTablexiaScreen newScreen, Runnable newScreenHandler, Runnable lastScreenHandler, Runnable finishHandler); + public void processTransaction(Stage stage, AbstractTablexiaScreen<?> lastScreen, AbstractTablexiaScreen<?> newScreen, Runnable newScreenHandler, Runnable lastScreenHandler, Runnable finishHandler); } private ScreenTransactionImplementation screenTransactionImplementation; @@ -222,7 +222,7 @@ public abstract class TablexiaApplication implements ApplicationListener { this.screenTransactionImplementation = screenTransactionImplementation; } - private void processTransaction(Stage stage, AbstractTablexiaScreen lastScreen, AbstractTablexiaScreen newScreen, Runnable newScreenHandler, Runnable lastScreenHandler, Runnable finishHandler) { + private void processTransaction(Stage stage, AbstractTablexiaScreen<?> lastScreen, AbstractTablexiaScreen<?> newScreen, Runnable newScreenHandler, Runnable lastScreenHandler, Runnable finishHandler) { screenTransactionImplementation.processTransaction(stage, lastScreen, newScreen, newScreenHandler, lastScreenHandler, finishHandler); } } @@ -234,7 +234,7 @@ public abstract class TablexiaApplication implements ApplicationListener { protected float lastScreenMoveTo = Gdx.graphics.getWidth(); @Override - public void processTransaction(Stage stage, final AbstractTablexiaScreen lastScreen, final AbstractTablexiaScreen newScreen, Runnable newScreenHandler, final Runnable lastScreenHandler, final Runnable finishHandler) { + public void processTransaction(Stage stage, final AbstractTablexiaScreen<?> lastScreen, final AbstractTablexiaScreen<?> newScreen, Runnable newScreenHandler, final Runnable lastScreenHandler, final Runnable finishHandler) { final int transactionSpeed = 2; newScreen.setLoadingListener(new ScreenLoadingListener() { @@ -259,7 +259,7 @@ public abstract class TablexiaApplication implements ApplicationListener { private static class MoveLeftAnimation extends MoveRightAnimation { @Override - public void processTransaction(Stage stage, final AbstractTablexiaScreen lastScreen, AbstractTablexiaScreen newScreen, Runnable newScreenHandler, final Runnable lastScreenHandler, final Runnable finishHandler) { + public void processTransaction(Stage stage, final AbstractTablexiaScreen<?> lastScreen, AbstractTablexiaScreen<?> newScreen, Runnable newScreenHandler, final Runnable lastScreenHandler, final Runnable finishHandler) { newScreenMoveFrom = Gdx.graphics.getWidth(); newScreenMoveTo = 0; lastScreenMoveTo = -Gdx.graphics.getWidth(); @@ -270,7 +270,7 @@ public abstract class TablexiaApplication implements ApplicationListener { private static class FadeAnimation implements cz.nic.tablexia.TablexiaApplication.ScreenTransaction.ScreenTransactionImplementation { @Override - public void processTransaction(Stage stage, final AbstractTablexiaScreen lastScreen, final AbstractTablexiaScreen newScreen, final Runnable newScreenHandler, final Runnable lastScreenHandler, final Runnable finishHandler) { + public void processTransaction(Stage stage, final AbstractTablexiaScreen<?> lastScreen, final AbstractTablexiaScreen<?> newScreen, final Runnable newScreenHandler, final Runnable lastScreenHandler, final Runnable finishHandler) { final int transactionSpeed = 1; final Texture texture = new ColorTexture(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), Color.BLACK); final Actor screenDimmer = new Actor(){ diff --git a/core/src/cz/nic/tablexia/game/GameDefinition.java b/core/src/cz/nic/tablexia/game/GameDefinition.java index 1dadee428..77ac3663b 100644 --- a/core/src/cz/nic/tablexia/game/GameDefinition.java +++ b/core/src/cz/nic/tablexia/game/GameDefinition.java @@ -14,10 +14,10 @@ public enum GameDefinition implements ApplicationEvent, IMenuItem { ROBBERY ("game_robbery_title", RuleScreen.class); - private String menuTextKey; - private Class<? extends AbstractTablexiaScreen> screenClass; + private String menuTextKey; + private Class<? extends AbstractTablexiaScreen<?>> screenClass; - private GameDefinition(String nameResource, Class<? extends AbstractTablexiaScreen> screenClass) { + private GameDefinition(String nameResource, Class<? extends AbstractTablexiaScreen<?>> screenClass) { this.menuTextKey = nameResource; this.screenClass = screenClass; } diff --git a/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java b/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java index 1257e8c00..651eb249b 100644 --- a/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java +++ b/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java @@ -13,7 +13,7 @@ import cz.nic.tablexia.game.games.robbery.loader.RobberyTextureManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.util.Log; -public class DebugScreen extends AbstractTablexiaScreen { +public class DebugScreen extends AbstractTablexiaScreen<Void> { private enum DebugGroupColors { RED(Color.RED), diff --git a/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java b/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java index 4aca56691..307597147 100644 --- a/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java +++ b/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java @@ -28,7 +28,7 @@ import cz.nic.tablexia.game.games.robbery.loader.RobberyDataManager; import cz.nic.tablexia.game.games.robbery.loader.RobberyTextureManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -public class GameScreen extends AbstractTablexiaScreen { +public class GameScreen extends AbstractTablexiaScreen<Void> { private class GameBackground extends Actor { diff --git a/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java b/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java index cc1145d12..e4b0f697b 100644 --- a/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java +++ b/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java @@ -25,7 +25,7 @@ import cz.nic.tablexia.loader.ApplicationFontManager; import cz.nic.tablexia.loader.CommonAssets; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -public class RuleScreen extends AbstractTablexiaScreen { +public class RuleScreen extends AbstractTablexiaScreen<Void> { private static final float TEXT_PAPER_POSITION_Y_RATIO = 1f/2; private static final float TEXT_PAPER_WIDTH_RATIO = 3f/5; diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java index 22ee1c4b8..60a00a892 100644 --- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java +++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java @@ -22,7 +22,7 @@ import cz.nic.tablexia.game.loader.AbstractDataManager; import cz.nic.tablexia.loader.IApplicationLoader; import cz.nic.tablexia.util.Log; -public abstract class AbstractTablexiaScreen extends ScreenAdapter { +public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { public static class TextManager extends AbstractDataManager<I18NBundle> implements IApplicationLoader { @@ -50,6 +50,21 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { } } + public class DataManager extends AbstractDataManager<T> implements IApplicationLoader { + + public class DataLoader implements AsyncTask<T> { + + @Override + public T call() throws Exception { + return prepareScreenData(); + } + } + + public void load() { + setAsyncTask(new DataLoader()); + } + } + public static interface ScreenLoadingListener { void loadingComplete(); } @@ -57,6 +72,7 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { private Stage stage; private AssetManager textureManager; private TextManager textManager; + private DataManager dataManager; private ScreenLoadingListener screenLoadingListener; private boolean loadingComplete; private boolean loadingStarted; @@ -66,6 +82,7 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { stage = prepareStage(); textureManager = new AssetManager(); textManager = new TextManager(); + dataManager = new DataManager(); loadingComplete = false; loadingStarted = false; @@ -115,6 +132,7 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { if (!loadingComplete) { startTextureLoader(); startTextLoader(); + startDataLoader(); loadingStarted = true; } } @@ -134,6 +152,7 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { if (loadingStarted) { if (!textureManager.update()) return; if (!textManager.update()) return; + if (!dataManager.update()) return; loadingComplete = true; performScreenLoaded(); performScreenResized((int)stage.getWidth(), (int)stage.getHeight()); @@ -150,6 +169,7 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { stage.dispose(); textureManager.dispose(); textManager.dispose(); + dataManager.dispose(); performScreenDisposed(); } @@ -185,6 +205,9 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { protected String prepareScreenTextResourcesAssetName() { return null; } + protected T prepareScreenData() { + return null; + } //////////////////////////// LOADERS @@ -201,6 +224,10 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { textManager.load(new Locale("cs", "CZ"), prepareScreenTextResourcesAssetName()); } + private void startDataLoader() { + dataManager.load(); + } + public Texture getTexture(String textureName) { return textureManager.get(textureName, Texture.class); @@ -210,4 +237,8 @@ public abstract class AbstractTablexiaScreen extends ScreenAdapter { return textManager.getResult().get(key); } + protected T getGameData() { + return dataManager.getResult(); + } + } diff --git a/core/src/cz/nic/tablexia/screen/LoaderScreen.java b/core/src/cz/nic/tablexia/screen/LoaderScreen.java index 6816c7bb2..656aaef48 100644 --- a/core/src/cz/nic/tablexia/screen/LoaderScreen.java +++ b/core/src/cz/nic/tablexia/screen/LoaderScreen.java @@ -5,7 +5,7 @@ import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.scenes.scene2d.Actor; -public class LoaderScreen extends AbstractTablexiaScreen { +public class LoaderScreen extends AbstractTablexiaScreen<Void> { private LoaderBackground background; private Texture backgroundTexture; diff --git a/core/src/cz/nic/tablexia/screen/ScreenDefinition.java b/core/src/cz/nic/tablexia/screen/ScreenDefinition.java index b4e1f477d..3b8fd6aad 100644 --- a/core/src/cz/nic/tablexia/screen/ScreenDefinition.java +++ b/core/src/cz/nic/tablexia/screen/ScreenDefinition.java @@ -19,11 +19,11 @@ public enum ScreenDefinition { ENCYCLOPEDIA (EncyclopediaScreen.class, MainMenuDefinition.ENCYCLOPEDIA), ABOUT_APPLICATION (AboutScreen.class, MainMenuDefinition.ABOUT_APPLICATION); - private Class<? extends AbstractTablexiaScreen> screenClass; - private MainMenuDefinition mainMenuDefinition; - private static Object messageHandler; + private Class<? extends AbstractTablexiaScreen<?>> screenClass; + private MainMenuDefinition mainMenuDefinition; + private static Object messageHandler; - private ScreenDefinition(Class<? extends AbstractTablexiaScreen> screenClass, MainMenuDefinition mainMenuDefinition) { + private ScreenDefinition(Class<? extends AbstractTablexiaScreen<?>> screenClass, MainMenuDefinition mainMenuDefinition) { this.screenClass = screenClass; this.mainMenuDefinition = mainMenuDefinition; } diff --git a/core/src/cz/nic/tablexia/screen/about/AboutScreen.java b/core/src/cz/nic/tablexia/screen/about/AboutScreen.java index acca98915..49f105b42 100644 --- a/core/src/cz/nic/tablexia/screen/about/AboutScreen.java +++ b/core/src/cz/nic/tablexia/screen/about/AboutScreen.java @@ -9,7 +9,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table; import cz.nic.tablexia.loader.ApplicationFontManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -public class AboutScreen extends AbstractTablexiaScreen { +public class AboutScreen extends AbstractTablexiaScreen<Void> { @Override protected void screenLoaded() { diff --git a/core/src/cz/nic/tablexia/screen/encyclopedia/EncyclopediaScreen.java b/core/src/cz/nic/tablexia/screen/encyclopedia/EncyclopediaScreen.java index f221d6fa2..7115d3d3e 100644 --- a/core/src/cz/nic/tablexia/screen/encyclopedia/EncyclopediaScreen.java +++ b/core/src/cz/nic/tablexia/screen/encyclopedia/EncyclopediaScreen.java @@ -9,7 +9,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table; import cz.nic.tablexia.loader.ApplicationFontManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -public class EncyclopediaScreen extends AbstractTablexiaScreen { +public class EncyclopediaScreen extends AbstractTablexiaScreen<Void> { @Override protected void screenLoaded() { diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java b/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java index c9288c651..67d8af3b0 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java @@ -8,7 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.Actor; import cz.nic.tablexia.loader.ApplicationTextureManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -public class GameMenuScreen extends AbstractTablexiaScreen { +public class GameMenuScreen extends AbstractTablexiaScreen<Void> { private GameMenuBackground background; diff --git a/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java b/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java index e64440f6a..7f133b4a4 100644 --- a/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java +++ b/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java @@ -9,7 +9,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table; import cz.nic.tablexia.loader.ApplicationFontManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -public class HallOfFameScreen extends AbstractTablexiaScreen { +public class HallOfFameScreen extends AbstractTablexiaScreen<Void> { @Override protected void screenLoaded() { diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java index 70b1ec942..e390f14b2 100644 --- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java +++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java @@ -15,7 +15,7 @@ import cz.nic.tablexia.loader.ApplicationFontManager; import cz.nic.tablexia.loader.CommonAssets; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -public class StatisticsScreen extends AbstractTablexiaScreen { +public class StatisticsScreen extends AbstractTablexiaScreen<Void> { private static final String BACKGROUND_TEXTURE = CommonAssets.WOODEN_BACKGOURND; -- GitLab