From da882f3a7948af79a43ad80fa65cb028714f59e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz> Date: Mon, 22 Jun 2015 14:07:25 +0200 Subject: [PATCH] Lower memory requirments for colors clickmaps --- .../games/night_watch/NightWatchGame.java | 26 +++++++------------ .../screen/AbstractTablexiaScreen.java | 2 +- .../screen/createuser/PanoramaScreen.java | 17 +++++------- .../screen/gamemenu/GameMenuScreen.java | 16 +++++++----- .../screen/gamemenu/pages/MenuPage.java | 14 +++------- .../screen/gamemenu/pages/OfficeMenuPage.java | 15 ++--------- core/src/cz/nic/tablexia/util/Utility.java | 19 ++++++++++++++ 7 files changed, 52 insertions(+), 57 deletions(-) diff --git a/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java b/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java index 39282501e..d5567e028 100644 --- a/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java +++ b/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java @@ -1,7 +1,6 @@ package cz.nic.tablexia.game.games.night_watch; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Action; import com.badlogic.gdx.scenes.scene2d.Group; @@ -28,14 +27,14 @@ import cz.nic.tablexia.game.games.night_watch.helper.TextureHelper; import cz.nic.tablexia.game.games.night_watch.solution.GameSolutionGenerator; import cz.nic.tablexia.game.games.night_watch.solution.Solution; import cz.nic.tablexia.game.games.night_watch.subscene.Watch; -import cz.nic.tablexia.game.games.robbery.rules.GameRule; import cz.nic.tablexia.util.Log; +import cz.nic.tablexia.util.Utility; import cz.nic.tablexia.util.ui.TablexiaButton; /** * Created by Václav TarantĂk on 6.3.15. */ -public class NightWatchGame extends AbstractTablexiaGame<GameRule> { +public class NightWatchGame extends AbstractTablexiaGame<int[][]> { private static final int SCREEN_WIDTH = TablexiaSettings.getWorldWidth(); private static final int SCREEN_MIN_HEIGHT = TablexiaSettings.getMinWorldHeight(); private static final int INITIAL_BG_TEXTURE_INDEX = 0; @@ -55,7 +54,6 @@ public class NightWatchGame extends AbstractTablexiaGame<GameRule> { private Watch watch; private TablexiaButton button; private TextureRegion clickmap; - private Pixmap pixmap; @Override protected void gameLoaded() { @@ -72,15 +70,17 @@ public class NightWatchGame extends AbstractTablexiaGame<GameRule> { prepareWindows(); prepareWatch(); prepareButton(); - prepareClickMap(); - startRound(); } @Override - protected void screenDisposed() { - pixmap.dispose(); + protected int[][] prepareGameData() { + clickmap = getScreenTextureRegion(TextureHelper.getClickMapPath(difficulty)); + if (!clickmap.getTexture().getTextureData().isPrepared()) { + clickmap.getTexture().getTextureData().prepare(); + } + return Utility.createColorMap(clickmap); } private void prepareBackground(){ @@ -144,14 +144,6 @@ public class NightWatchGame extends AbstractTablexiaGame<GameRule> { } - private void prepareClickMap() { - clickmap = getScreenTextureRegion(TextureHelper.getClickMapPath(difficulty)); - if (!clickmap.getTexture().getTextureData().isPrepared()) { - clickmap.getTexture().getTextureData().prepare(); - } - pixmap = clickmap.getTexture().getTextureData().consumePixmap(); - } - //initial animation private void startRound(){ enableClickables(false); @@ -319,6 +311,6 @@ public class NightWatchGame extends AbstractTablexiaGame<GameRule> { private Color getTouchedColor(float x, float y) { int clickX = (int) (x / SCREEN_WIDTH * clickmap.getRegionWidth()); int clickY = clickmap.getRegionHeight() - (int) (y / SCREEN_MIN_HEIGHT * clickmap.getRegionHeight()); - return new Color(pixmap.getPixel(clickmap.getRegionX() + clickX, clickmap.getRegionY() + clickY)); + return new Color(getData()[clickX][clickY]); } } diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java index 1c7babc5d..f091d3f69 100644 --- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java +++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java @@ -556,7 +556,7 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter { return textManager.getResult().format(key, args); } - protected T getData() { + public T getData() { return dataManager.getResult(); } diff --git a/core/src/cz/nic/tablexia/screen/createuser/PanoramaScreen.java b/core/src/cz/nic/tablexia/screen/createuser/PanoramaScreen.java index 888b4d983..bbd45075c 100644 --- a/core/src/cz/nic/tablexia/screen/createuser/PanoramaScreen.java +++ b/core/src/cz/nic/tablexia/screen/createuser/PanoramaScreen.java @@ -3,7 +3,6 @@ package cz.nic.tablexia.screen.createuser; import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Group; @@ -25,6 +24,7 @@ import cz.nic.tablexia.TablexiaApplication; import cz.nic.tablexia.bus.ApplicationBus; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.util.ScaleUtil; +import cz.nic.tablexia.util.Utility; import cz.nic.tablexia.util.ui.dialog.TablexiaDialog; import cz.nic.tablexia.util.ui.dialog.TextDialog; import cz.nic.tablexia.util.ui.dialog.text.DialogTextContent; @@ -32,7 +32,7 @@ import cz.nic.tablexia.util.ui.dialog.text.DialogTextContent; /** * Screen showing street animation and office before user create form */ -public class PanoramaScreen extends AbstractTablexiaScreen<Void> { +public class PanoramaScreen extends AbstractTablexiaScreen<int[][]> { public static final String GFX_PATH = "gfx/"; public static final String SFX_PATH = "sfx/"; @@ -52,7 +52,6 @@ public class PanoramaScreen extends AbstractTablexiaScreen<Void> { public static final String MUSIC_4 = MFX_PATH + "newspaper/4.mp3"; private TextureRegion clickmap; - private Pixmap pixmap; @Override protected String prepareScreenTextResourcesAssetName() { @@ -61,19 +60,17 @@ public class PanoramaScreen extends AbstractTablexiaScreen<Void> { } @Override - protected void screenLoaded() { - switchSubscreen(prepareBalcony()); - + protected int[][] prepareScreenData() { clickmap = getScreenTextureRegion(GFX_PATH + "newspaper/clickmap"); if (!clickmap.getTexture().getTextureData().isPrepared()) { clickmap.getTexture().getTextureData().prepare(); } - pixmap = clickmap.getTexture().getTextureData().consumePixmap(); + return Utility.createColorMap(clickmap); } @Override - protected void screenDisposed() { - pixmap.dispose(); + protected void screenLoaded() { + switchSubscreen(prepareBalcony()); } @Override @@ -365,7 +362,7 @@ public class PanoramaScreen extends AbstractTablexiaScreen<Void> { private Color getTouchedColor(float x, float y) { int clickX = (int) (x / newspaper.getWidth() * clickmap.getRegionWidth()); int clickY = clickmap.getRegionHeight() - (int) (y / newspaper.getHeight() * clickmap.getRegionHeight()); - return new Color(pixmap.getPixel(clickmap.getRegionX() + clickX, clickmap.getRegionY() + clickY)); + return new Color(getData()[clickX][clickY]); } }); diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java b/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java index 611caf40a..966ee8be5 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java @@ -1,5 +1,6 @@ package cz.nic.tablexia.screen.gamemenu; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.Image; @@ -11,12 +12,12 @@ import cz.nic.tablexia.game.GameDefinition; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.screen.gamemenu.pages.GameMenuPage; import cz.nic.tablexia.screen.gamemenu.pages.OfficeMenuPage; +import cz.nic.tablexia.util.Utility; import cz.nic.tablexia.util.ui.ViewPager; -public class GameMenuScreen extends AbstractTablexiaScreen<Void> { +public class GameMenuScreen extends AbstractTablexiaScreen<int[][]> { private ViewPager vp; - private OfficeMenuPage officeMenuPage; @Override protected String prepareScreenTextResourcesAssetName() { @@ -28,8 +29,7 @@ public class GameMenuScreen extends AbstractTablexiaScreen<Void> { protected void screenLoaded() { getStage().setDebugAll(TablexiaSettings.getInstance().isShowBoundingBoxes()); vp = new ViewPager(); - officeMenuPage = new OfficeMenuPage(this); - vp.addPage(officeMenuPage); + vp.addPage(new OfficeMenuPage(this)); for (GameDefinition gd : GameDefinition.getActiveGames()) { vp.addPage(new GameMenuPage(this, gd)); @@ -52,7 +52,11 @@ public class GameMenuScreen extends AbstractTablexiaScreen<Void> { } @Override - protected void screenDisposed() { - officeMenuPage.dispose(); + protected int[][] prepareScreenData() { + TextureRegion clickmap = getScreenTextureRegion(GameMenuAssets.OFFICE_CLICKMAP); + if (!clickmap.getTexture().getTextureData().isPrepared()) { + clickmap.getTexture().getTextureData().prepare(); + } + return Utility.createColorMap(clickmap); } } diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/MenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/MenuPage.java index 540fbad7b..8f782e7e4 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/MenuPage.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/MenuPage.java @@ -2,21 +2,20 @@ package cz.nic.tablexia.screen.gamemenu.pages; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Group; -import com.badlogic.gdx.utils.Disposable; import cz.nic.tablexia.screen.AbstractTablexiaScreen; /** * Created by lhoracek on 3/4/15. */ -public abstract class MenuPage extends Group implements Disposable { - private AbstractTablexiaScreen screen; +public abstract class MenuPage extends Group { + private AbstractTablexiaScreen<int[][]> screen; - public MenuPage(AbstractTablexiaScreen screen) { + public MenuPage(AbstractTablexiaScreen<int[][]> screen) { this.screen = screen; } - protected AbstractTablexiaScreen getScreen() { + protected AbstractTablexiaScreen<int[][]> getScreen() { return screen; } @@ -27,9 +26,4 @@ public abstract class MenuPage extends Group implements Disposable { a.setDebug(enabled); } } - - @Override - public void dispose() { - // nothing needed - } } diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/OfficeMenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/OfficeMenuPage.java index 5c97a921e..ab37ce03d 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/OfficeMenuPage.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/OfficeMenuPage.java @@ -1,7 +1,6 @@ package cz.nic.tablexia.screen.gamemenu.pages; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.InputEvent; @@ -40,7 +39,6 @@ public class OfficeMenuPage extends MenuPage { private Image encyclopedia; private Image street; private Image profile; - private final Pixmap pixmap; private final TextureRegion clickmap; @@ -104,11 +102,6 @@ public class OfficeMenuPage extends MenuPage { }); clickmap = getScreen().getScreenTextureRegion(GameMenuAssets.OFFICE_CLICKMAP); - if (!clickmap.getTexture().getTextureData().isPrepared()) { - clickmap.getTexture().getTextureData().prepare(); - } - - pixmap = clickmap.getTexture().getTextureData().consumePixmap(); } private void createImageStack() { @@ -160,7 +153,8 @@ public class OfficeMenuPage extends MenuPage { private Color getTouchedColor(float x, float y) { int clickX = (int) (x / getWidth() * clickmap.getRegionWidth()); int clickY = clickmap.getRegionHeight() - (int) (y / getHeight() * clickmap.getRegionHeight()); - return new Color(pixmap.getPixel(clickmap.getRegionX() + clickX, clickmap.getRegionY() + clickY)); + + return new Color(getScreen().getData()[clickX][clickY]); } /** @@ -168,9 +162,4 @@ public class OfficeMenuPage extends MenuPage { */ public static class ShowStreetEvent implements ApplicationBus.ApplicationEvent { } - - @Override - public void dispose() { - pixmap.dispose(); - } } diff --git a/core/src/cz/nic/tablexia/util/Utility.java b/core/src/cz/nic/tablexia/util/Utility.java index 02b8eca99..05148da9b 100644 --- a/core/src/cz/nic/tablexia/util/Utility.java +++ b/core/src/cz/nic/tablexia/util/Utility.java @@ -1,5 +1,7 @@ package cz.nic.tablexia.util; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.reflect.ClassReflection; import com.badlogic.gdx.utils.reflect.ReflectionException; import com.google.common.base.Splitter; @@ -31,4 +33,21 @@ public class Utility { return localAssetsPath.replace(File.separatorChar, '.'); } + public static int[][] createColorMap(TextureRegion clickmap) { + int clickmapWidth = clickmap.getRegionWidth(); + int clickmapHeight = clickmap.getRegionHeight(); + + Pixmap pixmap = clickmap.getTexture().getTextureData().consumePixmap(); + + int [][] colors = new int[clickmapWidth][clickmapHeight]; + for (int i = 0; i < clickmapWidth; i++) { + for (int j = 0; j < clickmapHeight; j++) { + colors[i][j] = pixmap.getPixel(clickmap.getRegionX() + i, clickmap.getRegionY() + j); + } + } + + pixmap.dispose(); + return colors; + } + } -- GitLab