diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java index f03c247fc1c3bebe01759e5a93f7343ff7f536cc..56fc7a4eae1d289bb500ad59ad57acc9faf7fbf3 100644 --- a/core/src/cz/nic/tablexia/TablexiaApplication.java +++ b/core/src/cz/nic/tablexia/TablexiaApplication.java @@ -10,6 +10,7 @@ import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.utils.viewport.ScreenViewport; import cz.nic.tablexia.bus.ApplicationBus; import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent; @@ -17,7 +18,6 @@ import cz.nic.tablexia.debug.DebugInfo; import cz.nic.tablexia.graphics.ColorTexture; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.screen.AbstractTablexiaScreen.ScreenLoadingListener; -import cz.nic.tablexia.util.ui.XFillViewport; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.alpha; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeIn; @@ -80,7 +80,7 @@ public abstract class TablexiaApplication implements ApplicationListener { @Override public void create() { - stage = new Stage(); + stage = new Stage(new ScreenViewport()); inputMultiplexer = new InputMultiplexer(stage); Gdx.input.setInputProcessor(inputMultiplexer); prepareDebugInfo(); diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java index ca685d3b416c06282b338632061641650561e4b3..eb42917b5f1755f2e64a55edcf1634b37be402c1 100644 --- a/core/src/cz/nic/tablexia/TablexiaSettings.java +++ b/core/src/cz/nic/tablexia/TablexiaSettings.java @@ -13,7 +13,7 @@ import cz.nic.tablexia.game.GameDefinition; import cz.nic.tablexia.game.difficulty.GameDifficulty; import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; -import cz.nic.tablexia.screen.gamemenu.GameMenuScreen; +import cz.nic.tablexia.screen.viewport.ViewportDebugScreen; import cz.nic.tablexia.util.Log; import cz.nic.tablexia.util.Utility; @@ -24,13 +24,13 @@ public class TablexiaSettings { private static final int MIN_SCREEN_HEIGHT = (int) (DEFAULT_SCREEN_WIDTH * MAXIMUM_RATIO); private static final boolean DEBUG_SHOW_BOUNDING_BOXES = true; - public static final Class<? extends AbstractTablexiaScreen<?>> INITIAL_SCREEN = GameMenuScreen.class; + public static final Class<? extends AbstractTablexiaScreen<?>> INITIAL_SCREEN = ViewportDebugScreen.class; - private static final String PREFERENCES_KEY = "cz.nic.tablexia."; - public static final String LOCALE_KEY = "locale"; - public static final String CURRENT_SCREEN_KEY = "current_screen"; + private static final String PREFERENCES_KEY = "cz.nic.tablexia."; + public static final String LOCALE_KEY = "locale"; + public static final String CURRENT_SCREEN_KEY = "current_screen"; - private static final String IDE_BUILD_VERSION_NAME = "DEVEL"; + private static final String IDE_BUILD_VERSION_NAME = "DEVEL"; private final BuildType BUILD_TYPE; private final String VERSION_NAME; @@ -42,15 +42,15 @@ public class TablexiaSettings { public static enum BuildType { - RELEASE ("release", false, Log.TablexiaLogLevel.ERROR), - DEBUG ("debug", true, Log.TablexiaLogLevel.DEBUG), - DEVEL ("devel", true, Log.TablexiaLogLevel.DEBUG); + RELEASE("release", false, Log.TablexiaLogLevel.ERROR), + DEBUG("debug", true, Log.TablexiaLogLevel.DEBUG), + DEVEL("devel", true, Log.TablexiaLogLevel.DEBUG); private final static BuildType FALLBACK_VARIANT = BuildType.DEVEL; - private final String key; - private final boolean isDebug; - private final Log.TablexiaLogLevel logLevel; + private final String key; + private final boolean isDebug; + private final Log.TablexiaLogLevel logLevel; private BuildType(String key, boolean isDebug, Log.TablexiaLogLevel logLevel) { this.key = key; @@ -257,7 +257,7 @@ public class TablexiaSettings { //////////////////////////// SCREEN SIZE - public static int getDefaultScreenWidth() { + public static int getWorldWidth() { return DEFAULT_SCREEN_WIDTH; } @@ -265,7 +265,7 @@ public class TablexiaSettings { return MAXIMUM_RATIO; } - public static int getMinScreenHeight() { + public static int getMinWorldHeight() { return MIN_SCREEN_HEIGHT; } } \ No newline at end of file diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java index 54666a561f8b45217070149d3eb2a0cd588efdd0..d0712ead42a2306fe1ba37e340415584b9ceae85 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java @@ -17,7 +17,6 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import cz.nic.tablexia.TablexiaSettings; import cz.nic.tablexia.game.GameDefinition; import cz.nic.tablexia.game.difficulty.GameDifficulty; -import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.screen.gamemenu.GameMenuAssets; import cz.nic.tablexia.util.ui.ViewPager; @@ -34,7 +33,7 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener { private Stack diffStack; private GameDifficulty gameDifficulty = GameDifficulty.EASY; - private float scrollOffset = TablexiaSettings.getDefaultScreenWidth(); // hack to keep paralax layers out of picture before scrolled for first time + private float scrollOffset = TablexiaSettings.getWorldWidth(); // hack to keep paralax layers out of picture before scrolled for first time public GameMenuPage(AbstractTablexiaScreen screen, GameDefinition game) { super(screen); diff --git a/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java b/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java index ab27da94d0352bebe2fc8f214cd809a7e933b88b..66adabe97dac73c02644bdfccedf562582e9935f 100644 --- a/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java +++ b/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java @@ -34,13 +34,14 @@ public class ViewportDebugScreen extends AbstractTablexiaScreen<Void> { getStage().setDebugAll(true); Image large = new Image(getTexture("yellow.png")); - large.setSize(TablexiaSettings.getDefaultScreenWidth(), TablexiaSettings.getMinScreenHeight() * 2); - large.setPosition(0, TablexiaSettings.getMinScreenHeight() / -2.0f); + large.setSize(TablexiaSettings.getWorldWidth(), TablexiaSettings.getMinWorldHeight() * 2); + large.setPosition(0, TablexiaSettings.getMinWorldHeight() / -2.0f); getStage().addActor(large); Image widescreen = new Image(getTexture("red.png")); - widescreen.setSize(1000, TablexiaSettings.getMinScreenHeight()); + widescreen.setSize(1000, TablexiaSettings.getMinWorldHeight()); + widescreen.setPosition(0,0); getStage().addActor(widescreen); int size = 10; @@ -48,7 +49,7 @@ public class ViewportDebugScreen extends AbstractTablexiaScreen<Void> { for (int j = 0; j < size; j++) { Texture checker = getTexture("checker.png"); Image check = new Image(checker); - check.setPosition(500 - (check.getWidth() * size / 2) + (i * check.getWidth()), TablexiaSettings.getMinScreenHeight() / 2 - (check.getWidth() * size / 2) + (j * check.getWidth())); + check.setPosition(500 - (check.getWidth() * size / 2) + (i * check.getWidth()), TablexiaSettings.getMinWorldHeight() / 2 - (check.getWidth() * size / 2) + (j * check.getWidth())); getStage().addActor(check); } } @@ -68,14 +69,19 @@ public class ViewportDebugScreen extends AbstractTablexiaScreen<Void> { @Override public void touchDragged(InputEvent event, float x, float y, int pointer) { - point.setPosition(x - point.getWidth() / 2, y - point.getHeight() / 2); + if(point != null) { + point.setPosition(x - point.getWidth() / 2, y - point.getHeight() / 2); + Log.debug(getClass(), "Touch coords " + (x - point.getWidth() / 2) + ":" + ( y - point.getHeight() / 2)); + } } @Override public void touchUp(InputEvent event, float x, float y, int pointer, int button) { - Log.debug(getClass(), "Liftoff"); - point.remove(); - point = null; + if(point != null) { + Log.debug(getClass(), "Liftoff"); + point.remove(); + point = null; + } } }); // TODO diff --git a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java index 831a9ac5c06b710f0c2051dc35b4e88a2812a4db..c9a71aba40cc8b1f7917f26c49fc29e1a13ce092 100644 --- a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java +++ b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java @@ -1,7 +1,6 @@ package cz.nic.tablexia.util.ui; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.utils.viewport.Viewport; @@ -17,43 +16,38 @@ public class XFillViewport extends Viewport { * Creates a new viewport using a new {@link com.badlogic.gdx.graphics.OrthographicCamera} with no maximum world size. */ public XFillViewport() { - this(TablexiaSettings.getDefaultScreenWidth(), TablexiaSettings.getMinScreenHeight(), new OrthographicCamera()); - Log.info(getClass().getName(), "Viewport size: " + TablexiaSettings.getDefaultScreenWidth() + "x" + TablexiaSettings.getMinScreenHeight()); + setWorldSize(TablexiaSettings.getWorldWidth(), TablexiaSettings.getMinWorldHeight()); + setCamera(new OrthographicCamera()); + Log.info(getClass().getName(), "Viewport size: " + TablexiaSettings.getWorldWidth() + "x" + TablexiaSettings.getMinWorldHeight()); } - /** - * Creates a new viewport with a maximum world size. - */ - public XFillViewport(float worldWidth, float worldHeight, Camera camera) { - setWorldSize(worldWidth, worldHeight); - setCamera(camera); - } - - private int screenX, screenY, screenWidth, screenHeight; private float cameraYOffset; - @Override public void update(int screenWidth, int screenHeight, boolean centerCamera) { float newWorldHeight = getWorldWidth() / ((float) screenWidth / (float) screenHeight); // FIT into screen keeping at least minimum ration - this.screenX = (newWorldHeight < TablexiaSettings.getMinScreenHeight()) ? ((int) ((screenWidth - (screenHeight / TablexiaSettings.getMaximumRatio())) / 2)) : 0; - this.screenY = 0; - this.screenWidth = (newWorldHeight < TablexiaSettings.getMinScreenHeight()) ? ((int) (screenHeight / TablexiaSettings.getMaximumRatio())) : screenWidth; - this.screenHeight = screenHeight; - setScreenBounds(screenX,screenY,this.screenWidth,this.screenHeight); - // SET NEW WORLD HEIGHT - this.setWorldHeight(newWorldHeight < TablexiaSettings.getMinScreenHeight() ? TablexiaSettings.getMinScreenHeight() : newWorldHeight); // World width dooes not change - cameraYOffset = (getWorldHeight() - TablexiaSettings.getMinScreenHeight()) / 2; + //int screenX = (newWorldHeight < TablexiaSettings.getMinWorldHeight()) ? ((int) ((screenWidth - (screenHeight / TablexiaSettings.getMaximumRatio())) / 2)) : 0; + int screenX = 0; + int screenY = 0; + //int newScreenWidth = (newWorldHeight < TablexiaSettings.getMinWorldHeight()) ? ((int) (screenHeight / TablexiaSettings.getMaximumRatio())) : screenWidth; + int newScreenWidth = screenWidth; + int newScreenHeight = screenHeight; - Log.info(getClass().getName(), "New viewport size (min: " + TablexiaSettings.getMinScreenHeight() + ") update: " + screenWidth + "x" + screenHeight + " - position: " + screenX + "x" + screenY + " - bounds: " + this.screenWidth + "x" + this.screenHeight + " - world: " + getWorldWidth() + "x" + getWorldHeight() + " - y offset: " + cameraYOffset); + // SET NEW WORLD HEIGHT + this.setWorldHeight(Math.max(TablexiaSettings.getMinWorldHeight(), newWorldHeight)); // World width dooes not change + this.setWorldWidth(TablexiaSettings.getWorldWidth()); + cameraYOffset = (getWorldHeight() - TablexiaSettings.getMinWorldHeight()) / 2; + setScreenBounds(screenX, screenY, newScreenWidth, newScreenHeight); apply(centerCamera); } @Override public void apply(boolean centerCamera) { - Gdx.gl.glViewport(screenX, screenY, screenWidth, screenHeight); + Log.info(getClass().getName(), "New viewport size (min: " + TablexiaSettings.getMinWorldHeight() + ") position: " + getScreenX() + ":" + getScreenY() + " - bounds: " + getScreenWidth() + ":" + getScreenHeight() + " - world: " + getWorldWidth() + "x" + getWorldHeight() + " - y offset: " + cameraYOffset); + + Gdx.gl.glViewport(getScreenX(), getScreenY(), getScreenWidth(), getScreenHeight()); getCamera().viewportWidth = getWorldWidth(); getCamera().viewportHeight = getWorldHeight(); if (centerCamera) getCamera().position.set(getWorldWidth() / 2, getWorldHeight() / 2, 0);