Skip to content
Snippets Groups Projects
Commit da882f3a authored by Matyáš Latner's avatar Matyáš Latner
Browse files

Lower memory requirments for colors clickmaps

parent c1301b85
No related branches found
No related tags found
No related merge requests found
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]);
}
}
......@@ -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();
}
......
......@@ -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]);
}
});
......
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);
}
}
......@@ -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
}
}
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();
}
}
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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment