From 8c18aebabb8fb79e739398f4aa86c1593c8d16c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz> Date: Tue, 24 Feb 2015 13:12:59 +0100 Subject: [PATCH] #1 New change locale event, localised loading screen, locale debug info --- core/src/cz/nic/tablexia/Tablexia.java | 15 ++---- .../src/cz/nic/tablexia/TablexiaSettings.java | 8 +++- .../bus/event/LocaleChangedEvent.java | 17 +++++++ core/src/cz/nic/tablexia/debug/DebugInfo.java | 27 ++++++----- .../TablexiaDataManager.java} | 11 ++++- .../application/ApplicationTextManager.java | 5 +- core/src/cz/nic/tablexia/menu/MainMenu.java | 4 +- .../screen/AbstractTablexiaScreen.java | 48 ++++++++++++------- .../screen/{ => loader}/LoaderScreen.java | 26 +++++++--- .../screen/statistics/StatisticsScreen.java | 2 +- 10 files changed, 107 insertions(+), 56 deletions(-) create mode 100644 core/src/cz/nic/tablexia/bus/event/LocaleChangedEvent.java rename core/src/cz/nic/tablexia/{game/loader/AbstractDataManager.java => loader/TablexiaDataManager.java} (83%) rename core/src/cz/nic/tablexia/screen/{ => loader}/LoaderScreen.java (63%) diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java index c55762a93..e43c44ae1 100644 --- a/core/src/cz/nic/tablexia/Tablexia.java +++ b/core/src/cz/nic/tablexia/Tablexia.java @@ -1,8 +1,6 @@ package cz.nic.tablexia; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.utils.reflect.ClassReflection; import com.badlogic.gdx.utils.reflect.ReflectionException; @@ -18,15 +16,13 @@ import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.loader.application.ApplicationTextureManager; import cz.nic.tablexia.menu.MainMenu; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -import cz.nic.tablexia.screen.LoaderScreen; import cz.nic.tablexia.screen.ScreenDefinition; import cz.nic.tablexia.screen.gamemenu.GameMenuScreen; +import cz.nic.tablexia.screen.loader.LoaderScreen; import cz.nic.tablexia.util.Log; public class Tablexia extends TablexiaApplication { - - public static final String LOADER_BACKGROUND = "CZ/application/gfx/intro/screen_loader_background.png"; private static final float MAIN_MENU_WIDTH_RATIO = 2f/7; private boolean loadingComplete = false; @@ -66,12 +62,9 @@ public class Tablexia extends TablexiaApplication { // init event bus handlers ApplicationBus.getInstance().subscribe(this); ScreenDefinition.initBus(); - - // sync loading of first application image (loader background) - AssetManager loaderGraphicManager = new AssetManager(); - loaderGraphicManager.load(LOADER_BACKGROUND, Texture.class); - loaderGraphicManager.finishLoading(); - setScreenIfIsDifferent(new LoaderScreen(loaderGraphicManager.get(LOADER_BACKGROUND, Texture.class))); + + // sync loaded screen with loader image + setScreenIfIsDifferent(new LoaderScreen()); // async loading of remaining application assets ApplicationTextureManager.getInstance().load(); diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java index a543b62d8..c8a52bbc4 100644 --- a/core/src/cz/nic/tablexia/TablexiaSettings.java +++ b/core/src/cz/nic/tablexia/TablexiaSettings.java @@ -5,6 +5,8 @@ import com.badlogic.gdx.Preferences; import java.util.Locale; +import cz.nic.tablexia.bus.ApplicationBus; +import cz.nic.tablexia.bus.event.LocaleChangedEvent; import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.util.Log; @@ -156,7 +158,7 @@ public class TablexiaSettings { return BUILD_TYPE.isDebug(); } - public boolean isShowBoudingBoxes() { + public boolean isShowBoundingBoxes() { return isDebug() && DEBUG_SHOW_BOUNDING_BOXES; } @@ -165,9 +167,13 @@ public class TablexiaSettings { } public void setLocale(LocaleDefinition localeDefinition) { + LocaleDefinition lastLocale = selectedLocale; selectedLocale = localeDefinition; preferences.putString(LOCALE_KEY, localeDefinition.getLocaleKey()); preferences.flush(); + if (lastLocale.getLocale() != localeDefinition.getLocale()) { + ApplicationBus.getInstance().post(new LocaleChangedEvent(localeDefinition)).asynchronously(); + } } public LocaleDefinition getLocaleDefinition() { diff --git a/core/src/cz/nic/tablexia/bus/event/LocaleChangedEvent.java b/core/src/cz/nic/tablexia/bus/event/LocaleChangedEvent.java new file mode 100644 index 000000000..de8920b85 --- /dev/null +++ b/core/src/cz/nic/tablexia/bus/event/LocaleChangedEvent.java @@ -0,0 +1,17 @@ +package cz.nic.tablexia.bus.event; + +import cz.nic.tablexia.TablexiaSettings; +import cz.nic.tablexia.bus.ApplicationBus; + +public class LocaleChangedEvent implements ApplicationBus.ApplicationEvent { + + private TablexiaSettings.LocaleDefinition localeDefinition; + + public LocaleChangedEvent(TablexiaSettings.LocaleDefinition localeDefinition) { + this.localeDefinition = localeDefinition; + } + + public TablexiaSettings.LocaleDefinition getLocaleDefinition() { + return localeDefinition; + } +} diff --git a/core/src/cz/nic/tablexia/debug/DebugInfo.java b/core/src/cz/nic/tablexia/debug/DebugInfo.java index 088943a55..bfed63a1a 100644 --- a/core/src/cz/nic/tablexia/debug/DebugInfo.java +++ b/core/src/cz/nic/tablexia/debug/DebugInfo.java @@ -1,13 +1,5 @@ package cz.nic.tablexia.debug; -import static com.badlogic.gdx.scenes.scene2d.actions.Actions.alpha; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentLinkedQueue; - -import net.engio.mbassy.listener.Handler; - import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.BitmapFont; @@ -21,11 +13,20 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.utils.Disposable; +import net.engio.mbassy.listener.Handler; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentLinkedQueue; + import cz.nic.tablexia.TablexiaApplication.ScreenChangedEvent; +import cz.nic.tablexia.TablexiaSettings; import cz.nic.tablexia.bus.ApplicationBus; import cz.nic.tablexia.graphics.ColorTexture; import cz.nic.tablexia.screen.AbstractTablexiaScreen.ScreenInfoEvent; +import static com.badlogic.gdx.scenes.scene2d.actions.Actions.alpha; + /** * Debug info container * @@ -81,6 +82,7 @@ public class DebugInfo extends Table implements Disposable { private static final String NATIVE_HEAP = "Native Heap"; private static final String JAVA_HEAP = "Java Heap"; private static final String FPS = "FPS"; + private static final String LOCALE = "Locale"; private static final String SCREEN_NAME = "Screen Name"; @@ -119,10 +121,11 @@ public class DebugInfo extends Table implements Disposable { } public void update() { - applicationDebugInfo.setInfoValue(FPS, "" + Gdx.graphics.getFramesPerSecond()); - applicationDebugInfo.setInfoValue(JAVA_HEAP, ("" + Gdx.app.getJavaHeap() / MB_SIZE) + UNIT_MB); - applicationDebugInfo.setInfoValue(NATIVE_HEAP, ("" + Gdx.app.getNativeHeap() / MB_SIZE) + UNIT_MB); - + applicationDebugInfo.setInfoValue(FPS, "" + Gdx.graphics.getFramesPerSecond()); + applicationDebugInfo.setInfoValue(JAVA_HEAP, ("" + Gdx.app.getJavaHeap() / MB_SIZE) + UNIT_MB); + applicationDebugInfo.setInfoValue(NATIVE_HEAP, ("" + Gdx.app.getNativeHeap() / MB_SIZE) + UNIT_MB); + applicationDebugInfo.setInfoValue(LOCALE, "" + TablexiaSettings.getInstance().getLocale()); + while (!screenDebugInfoQueue.isEmpty()) { ScreenInfoEvent screenInfoEvent = screenDebugInfoQueue.poll(); screenDebugInfo.setInfoValue(screenInfoEvent.getInfoKey(), screenInfoEvent.getInfoValue()); diff --git a/core/src/cz/nic/tablexia/game/loader/AbstractDataManager.java b/core/src/cz/nic/tablexia/loader/TablexiaDataManager.java similarity index 83% rename from core/src/cz/nic/tablexia/game/loader/AbstractDataManager.java rename to core/src/cz/nic/tablexia/loader/TablexiaDataManager.java index 0d067c5c2..d093d4eb0 100644 --- a/core/src/cz/nic/tablexia/game/loader/AbstractDataManager.java +++ b/core/src/cz/nic/tablexia/loader/TablexiaDataManager.java @@ -1,11 +1,12 @@ -package cz.nic.tablexia.game.loader; +package cz.nic.tablexia.loader; import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.async.AsyncExecutor; import com.badlogic.gdx.utils.async.AsyncResult; import com.badlogic.gdx.utils.async.AsyncTask; +import com.badlogic.gdx.utils.async.ThreadUtils; -public abstract class AbstractDataManager<T> implements Disposable { +public class TablexiaDataManager<T> implements Disposable { private AsyncExecutor asyncExecutor; private AsyncTask<T> asyncTask; @@ -46,6 +47,12 @@ public abstract class AbstractDataManager<T> implements Disposable { } return false; } + + public void finishLoading () { + while (!update()) { + ThreadUtils.yield(); + } + } public T getResult() { if (result == null) { diff --git a/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java b/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java index 35ad28fa4..3d9e3e1e0 100644 --- a/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java +++ b/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java @@ -7,9 +7,8 @@ import com.badlogic.gdx.utils.async.AsyncTask; import java.util.Locale; -import cz.nic.tablexia.game.loader.AbstractDataManager; +import cz.nic.tablexia.loader.TablexiaDataManager; import cz.nic.tablexia.loader.IApplicationLoader; -import cz.nic.tablexia.util.Log; /** * Texture loader and manager for application context. @@ -17,7 +16,7 @@ import cz.nic.tablexia.util.Log; * @author Matyáš Latner * */ -public class ApplicationTextManager extends AbstractDataManager<I18NBundle> implements IApplicationLoader { +public class ApplicationTextManager extends TablexiaDataManager<I18NBundle> implements IApplicationLoader { private static final String APPLICATION_TEXT_RESOURCE_FILE = "text/application/application"; diff --git a/core/src/cz/nic/tablexia/menu/MainMenu.java b/core/src/cz/nic/tablexia/menu/MainMenu.java index 2ecc7cb57..6c1b076f1 100644 --- a/core/src/cz/nic/tablexia/menu/MainMenu.java +++ b/core/src/cz/nic/tablexia/menu/MainMenu.java @@ -50,7 +50,7 @@ public class MainMenu extends Stack { public MainMenu(float width, float height) { setBounds(0, 0, width, height); - setDebug(TablexiaSettings.getInstance().isShowBoudingBoxes()); + setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes()); Texture background = ApplicationTextureManager.getInstance().getTexture(ApplicationTextureManager.MAINMENU_BACKGROUND); background.setFilter(TextureFilter.Linear, TextureFilter.Linear); @@ -92,7 +92,7 @@ public class MainMenu extends Stack { public void initMenuItems() { menuTableLayout.reset(); - menuTableLayout.setDebug(TablexiaSettings.getInstance().isShowBoudingBoxes()); + menuTableLayout.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes()); for (final MainMenuDefinition menuItem : MainMenuDefinition.values()) { addMenuItem(menuItem); diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java index 69f93b02f..21685fca9 100644 --- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java +++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java @@ -3,7 +3,6 @@ package cz.nic.tablexia.screen; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.ScreenAdapter; -import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Texture; @@ -21,7 +20,7 @@ import java.util.Locale; import cz.nic.tablexia.TablexiaSettings; import cz.nic.tablexia.bus.ApplicationBus; import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent; -import cz.nic.tablexia.game.loader.AbstractDataManager; +import cz.nic.tablexia.loader.TablexiaDataManager; import cz.nic.tablexia.loader.TablexiaSoundManager; import cz.nic.tablexia.loader.TablexiaTextureManager; import cz.nic.tablexia.util.Log; @@ -29,8 +28,10 @@ import cz.nic.tablexia.util.Log; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.moveTo; public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { - - private static class TextManager extends AbstractDataManager<I18NBundle> { + + private boolean loadAsync; + + private static class TextManager extends TablexiaDataManager<I18NBundle> { private static class TextLoader implements AsyncTask<I18NBundle> { @@ -56,7 +57,7 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { } } - private class DataManager extends AbstractDataManager<T> { + private class DataManager extends TablexiaDataManager<T> { public class DataLoader implements AsyncTask<T> { @@ -102,10 +103,14 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { private ScreenLoadingListener screenLoadingListener; private boolean loadingComplete; private boolean loadingStarted; + + public AbstractTablexiaScreen() { + this(true); + } - - public AbstractTablexiaScreen() { - stage = prepareStage(); + public AbstractTablexiaScreen(boolean loadAsync) { + stage = prepareStage(); + this.loadAsync = loadAsync; textureManager = new TablexiaTextureManager(); soundManager = new TablexiaSoundManager(); textManager = new TextManager(); @@ -183,11 +188,20 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { @Override public final void render(float delta) { if (!loadingComplete) { - if (loadingStarted) { - if (!textureManager.update()) return; - if (!soundManager.update()) return; - if (!textManager.update()) return; - if (!dataManager.update()) return; + if (loadingStarted) { + + if (loadAsync) { + if (!textureManager.update()) return; + if (!soundManager.update()) return; + if (!textManager.update()) return; + if (!dataManager.update()) return; + } else { + textureManager.finishLoading(); + soundManager.finishLoading(); + textManager.finishLoading(); + dataManager.finishLoading(); + } + loadingComplete = true; performScreenLoaded(); performScreenResized((int)stage.getWidth(), (int)stage.getHeight()); @@ -195,10 +209,10 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { } } else { screenRender(delta); - stage.act(Gdx.graphics.getDeltaTime()); + stage.act(delta); stage.draw(); } - }; + } @Override public final void dispose() { @@ -251,8 +265,8 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { protected void printScreenInfo(String infoKey, String infoValue) { ApplicationBus.getInstance().post(new ScreenInfoEvent(infoKey, infoValue)).asynchronously(); } - - + + //////////////////////////// LOADERS private void startTextureLoader() { diff --git a/core/src/cz/nic/tablexia/screen/LoaderScreen.java b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java similarity index 63% rename from core/src/cz/nic/tablexia/screen/LoaderScreen.java rename to core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java index 656aaef48..0b47e137d 100644 --- a/core/src/cz/nic/tablexia/screen/LoaderScreen.java +++ b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java @@ -1,11 +1,17 @@ -package cz.nic.tablexia.screen; +package cz.nic.tablexia.screen.loader; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.scenes.scene2d.Actor; +import java.util.List; + +import cz.nic.tablexia.screen.AbstractTablexiaScreen; + public class LoaderScreen extends AbstractTablexiaScreen<Void> { + + private static final String LOADER_BACKGROUND = "application/gfx/intro/screen_loader_background.png"; private LoaderBackground background; private Texture backgroundTexture; @@ -14,6 +20,7 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> { public LoaderBackground() { + backgroundTexture = getTexture(LOADER_BACKGROUND); backgroundTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear); } @@ -25,12 +32,17 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> { } } - - public LoaderScreen(Texture backgroundTexture) { - this.backgroundTexture = backgroundTexture; - } - - @Override + + public LoaderScreen() { + super(false); + } + + @Override + protected void prepareScreenTextureAssetNames(List<String> textureFileNames) { + textureFileNames.add(LOADER_BACKGROUND); + } + + @Override protected void screenLoaded() { background = new LoaderBackground(); getStage().addActor(background); diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java index 570bc6e63..a9234c33a 100644 --- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java +++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java @@ -33,7 +33,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { label.setPosition(getStage().getWidth() / 2, getStage().getHeight() / 2); backgroundLayout.setActor(label); - backgroundLayout.setDebug(TablexiaSettings.getInstance().isShowBoudingBoxes()); + backgroundLayout.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes()); getStage().addActor(backgroundLayout); } -- GitLab