From 8b7633d4225bca965fbec5c01609a19aa597b7b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Hor=C3=A1=C4=8Dek?= <horaceklubos@gmail.com> Date: Mon, 13 Apr 2015 19:47:32 +0200 Subject: [PATCH] #12 Auto x-filling centering viewport --- core/assets/common/screen/debug/black.png | Bin 0 -> 86 bytes core/assets/common/screen/debug/blue.png | Bin 0 -> 86 bytes core/assets/common/screen/debug/pink.png | Bin 0 -> 86 bytes core/assets/common/screen/debug/red.png | Bin 0 -> 86 bytes core/assets/common/screen/debug/yellow.png | Bin 0 -> 86 bytes .../src/cz/nic/tablexia/TablexiaSettings.java | 4 +- .../tablexia/screen/loader/LoaderScreen.java | 22 +++++--- .../screen/viewport/ViewportDebugScreen.java | 51 ++++++++++++++++++ .../nic/tablexia/util/ui/XFillViewport.java | 33 ++++++++++-- .../nic/tablexia/desktop/DesktopLauncher.java | 2 +- 10 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 core/assets/common/screen/debug/black.png create mode 100644 core/assets/common/screen/debug/blue.png create mode 100644 core/assets/common/screen/debug/pink.png create mode 100644 core/assets/common/screen/debug/red.png create mode 100644 core/assets/common/screen/debug/yellow.png create mode 100644 core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java diff --git a/core/assets/common/screen/debug/black.png b/core/assets/common/screen/debug/black.png new file mode 100644 index 0000000000000000000000000000000000000000..d8fc30a3129c1ed8bf6f5c1ffb25a031c3e894ea GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blmSQK*5Dp-y;YjHK@_9X7978x} fCMP5${NQI`WMO2e-E`tUP=dkJ)z4*}Q$iB}VX6^* literal 0 HcmV?d00001 diff --git a/core/assets/common/screen/debug/blue.png b/core/assets/common/screen/debug/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..c3870f917f4968a8db714a3628a502e7fc310841 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blmSQK*5Dp-y;YjHK@_9X7978x} fCMN{^{x8qKT*9PUd2;sypag@btDnm{r-UW|d=e7A literal 0 HcmV?d00001 diff --git a/core/assets/common/screen/debug/pink.png b/core/assets/common/screen/debug/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..26eb49ed2d2bc4562b4b7bf96c20f6d45268bebe GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blmSQK*5Dp-y;YjHK@_9X7978x} fCjW^4|IMC(Bb+&#o&7>AP=dkJ)z4*}Q$iB}dO#8l literal 0 HcmV?d00001 diff --git a/core/assets/common/screen/debug/red.png b/core/assets/common/screen/debug/red.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc4cc83c9b5d765531cf3061344e26ba428e430 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blmSQK*5Dp-y;YjHK@_9X7978x} fCjU5p;DbB^D+A;I)#uDW3K=|I{an^LB{Ts5j<yp` literal 0 HcmV?d00001 diff --git a/core/assets/common/screen/debug/yellow.png b/core/assets/common/screen/debug/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..de8ab0bd398bc00d945e679e6a301d971caa7f2f GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blmSQK*5Dp-y;YjHK@_9X7978x} fCjY2!erV6Y-obSJCfAKSKnVs<S3j3^P6<r_j<yq% literal 0 HcmV?d00001 diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java index ca685d3b4..8eca7f111 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,7 +24,7 @@ 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"; diff --git a/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java index 8bc3b3a99..ab4540de9 100644 --- a/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java +++ b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java @@ -1,5 +1,6 @@ package cz.nic.tablexia.screen.loader; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.scenes.scene2d.actions.Actions; import com.badlogic.gdx.scenes.scene2d.ui.Image; @@ -12,7 +13,7 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> { private static final String LOADER_BACKGROUND = "gfx/screen_loader_background.jpg"; private static final String LOADER_SMALL_HAND = "gfx/screen_loader_smallhand.png"; - private static final String LOADER_BIG_HAND = "gfx/screen_loader_bighand.png"; + private static final String LOADER_BIG_HAND = "gfx/screen_loader_bighand.png"; public LoaderScreen() { super(false, false, TablexiaAssetManager.StorageType.INTERNAL); @@ -33,17 +34,24 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> { getStage().addActor(background); Image smallhand = new Image(getTexture(LOADER_SMALL_HAND)); - smallhand.setPosition(getStage().getWidth()*0.22f, getStage().getHeight() * 0.64f); - smallhand.setSize(getStage().getWidth()*0.01f, getStage().getHeight()*0.06f); + smallhand.setPosition(getStage().getWidth() * 0.22f, getStage().getHeight() * 0.64f); + smallhand.setSize(getStage().getWidth() * 0.01f, getStage().getHeight() * 0.06f); getStage().addActor(smallhand); - smallhand.setOrigin(smallhand.getWidth()/2,0); + smallhand.setOrigin(smallhand.getWidth() / 2, 0); smallhand.addAction(Actions.forever(Actions.rotateBy(-360, 6))); Image bighand = new Image(getTexture(LOADER_BIG_HAND)); - bighand.setPosition(getStage().getWidth()*0.22f, getStage().getHeight() * 0.64f); - bighand.setSize(getStage().getWidth()*0.01f, getStage().getHeight()*0.06f); + bighand.setPosition(getStage().getWidth() * 0.22f, getStage().getHeight() * 0.64f); + bighand.setSize(getStage().getWidth() * 0.01f, getStage().getHeight() * 0.06f); getStage().addActor(bighand); - bighand.setOrigin(bighand.getWidth()/2,0); + bighand.setOrigin(bighand.getWidth() / 2, 0); bighand.addAction(Actions.forever(Actions.rotateBy(-360, 0.5f))); } + + @Override + public Texture getTexture(String textureName) { + Texture t = super.getTexture(textureName); + t.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); + return t; + } } diff --git a/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java b/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java new file mode 100644 index 000000000..55d5cb127 --- /dev/null +++ b/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java @@ -0,0 +1,51 @@ +package cz.nic.tablexia.screen.viewport; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.scenes.scene2d.ui.Image; + +import java.util.List; + +import cz.nic.tablexia.TablexiaSettings; +import cz.nic.tablexia.screen.AbstractTablexiaScreen; + +/** + * Created by lhoracek on 4/13/15. + */ +public class ViewportDebugScreen extends AbstractTablexiaScreen<Void> { + + private static final String BASE = "screen/debug/"; + + @Override + protected void prepareScreenTextureAssetNames(List<String> textureFileNames) { + textureFileNames.add(BASE + "red.png"); + textureFileNames.add(BASE + "blue.png"); + textureFileNames.add(BASE + "yellow.png"); + textureFileNames.add(BASE + "pink.png"); + textureFileNames.add(BASE + "black.png"); + } + + @Override + protected void screenLoaded() { + getStage().setDebugAll(true); + + Image large = new Image(getTexture("yellow.png")); + large.setSize(TablexiaSettings.getDefaultScreenWidth(), TablexiaSettings.getMinScreenHeight()*2); + large.setPosition(0,TablexiaSettings.getMinScreenHeight()/-2.0f); + getStage().addActor(large); + + + + Image widescreen = new Image(getTexture("red.png")); + widescreen.setSize(TablexiaSettings.getDefaultScreenWidth(), TablexiaSettings.getMinScreenHeight()); + widescreen.setPosition(0,0); + getStage().addActor(widescreen); + + + // TODO + } + + @Override + public Texture getTexture(String textureName) { + return super.getTexture(BASE + textureName); + } +} diff --git a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java index 6f9a192ae..9d4f515ea 100644 --- a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java +++ b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java @@ -1,5 +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; @@ -12,9 +13,6 @@ import cz.nic.tablexia.util.Log; */ public class XFillViewport extends Viewport { - - private float worldWidth, worldHeight; - /** * Creates a new viewport using a new {@link com.badlogic.gdx.graphics.OrthographicCamera} with no maximum world size. */ @@ -31,10 +29,35 @@ public class XFillViewport extends Viewport { setCamera(camera); } + private int screenX, screenY, screenWidth, screenHeight; + private float cameraYOffset; + + @Override public void update(int screenWidth, int screenHeight, boolean centerCamera) { - int height = (int) Math.min(screenHeight, screenWidth * TablexiaSettings.getMaximumRatio()); - setScreenBounds(0, Math.max(0, (screenHeight - height) / 2), screenWidth, height); + 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; + + // SET NEW WORLD HEIGHT + this.setWorldHeight(newWorldHeight < TablexiaSettings.getMinScreenHeight() ? TablexiaSettings.getMinScreenHeight() : newWorldHeight); // World width dooes not change + cameraYOffset = (getWorldHeight() - TablexiaSettings.getMinScreenHeight()) / 2; + Log.info(getClass().getName(), "New viewport size: update: " + screenWidth + "x" + screenHeight + " - position: " + screenX + "x" + screenY + " - bounds: " + this.screenWidth + "x" + this.screenHeight + " - world: " + getWorldWidth() + "x" + getWorldHeight() + " - y offset: " + cameraYOffset); apply(centerCamera); } + + @Override + public void apply(boolean centerCamera) { + Gdx.gl.glViewport(screenX, screenY, screenWidth, screenHeight); + getCamera().viewportWidth = getWorldWidth(); + getCamera().viewportHeight = getWorldHeight(); + if (centerCamera) getCamera().position.set(getWorldWidth() / 2, getWorldHeight() / 2, 0); + getCamera().position.y -= cameraYOffset; + getCamera().update(); + } + } \ No newline at end of file diff --git a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java index 2b8c7bf1a..e9bbd1056 100644 --- a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java +++ b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java @@ -32,7 +32,7 @@ public class DesktopLauncher { String versionName = loadAttributeFromManifest(VERSION_NAME_MANIFEST_ATTRIBUTE); LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); - config.resizable = false; + config.resizable = buildType == null || buildType.equals(TablexiaSettings.BuildType.DEVEL.getKey()); config.width = 1280; config.height = 800; -- GitLab