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