diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2015-02-06 12:24:12 +0100 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2015-02-08 23:46:57 +0100 | 
| commit | cf428773cfdabd137eecee3c9313e355c16b4872 (patch) | |
| tree | 4245578ef8691656fbf0c5cb4336b2e0210dcd07 | |
| parent | 88a0900bc5486da860580a108c2d13519573e85a (diff) | |
| download | RustAndDust-cf428773cfdabd137eecee3c9313e355c16b4872.zip RustAndDust-cf428773cfdabd137eecee3c9313e355c16b4872.tar.gz | |
Screens: add hud size correction depending on screen density
6 files changed, 67 insertions, 17 deletions
| diff --git a/core/src/ch/asynk/tankontank/TankOnTank.java b/core/src/ch/asynk/tankontank/TankOnTank.java index 40e4240..70b118f 100644 --- a/core/src/ch/asynk/tankontank/TankOnTank.java +++ b/core/src/ch/asynk/tankontank/TankOnTank.java @@ -20,6 +20,7 @@ public class TankOnTank extends Game      public Factory factory;      public Ctrl ctrl;      public Config config; +    public int hudCorrection;      public TextureAtlas uiAtlas;      public TextureAtlas menuAtlas; @@ -48,7 +49,8 @@ public class TankOnTank extends Game      public void create ()      {          Gdx.app.setLogLevel(Gdx.app.LOG_DEBUG); -        debug("TankOnTank", "create() [" + Gdx.graphics.getWidth() + ";" + Gdx.graphics.getHeight() + "] " + Gdx.graphics.getDensity()); +        this.hudCorrection = ((int) (125 * Gdx.graphics.getDensity()) - 75); +        debug("TankOnTank", "create() [" + Gdx.graphics.getWidth() + ";" + Gdx.graphics.getHeight() + "] " + Gdx.graphics.getDensity() + " -> " + hudCorrection);          manager = new AssetManager();          factory = new Factory(this); diff --git a/core/src/ch/asynk/tankontank/game/Hud.java b/core/src/ch/asynk/tankontank/game/Hud.java index 5aa8075..0afc999 100644 --- a/core/src/ch/asynk/tankontank/game/Hud.java +++ b/core/src/ch/asynk/tankontank/game/Hud.java @@ -69,9 +69,9 @@ public class Hud implements Disposable, Animation          stats.dispose();      } -    public void resize(int width, int height) +    public void resize(int left, int bottom, int width, int height)      { -        Position.update(width, height); +        Position.update(left, bottom, width, height);          playerInfo.updatePosition();          actionButtons.updatePosition();          msg.updatePosition(); diff --git a/core/src/ch/asynk/tankontank/screens/GameCamera.java b/core/src/ch/asynk/tankontank/screens/GameCamera.java index b812269..52ef271 100644 --- a/core/src/ch/asynk/tankontank/screens/GameCamera.java +++ b/core/src/ch/asynk/tankontank/screens/GameCamera.java @@ -24,8 +24,11 @@ public class GameCamera extends OrthographicCamera      private Rectangle window;      private Matrix4 hudMatrix;      private Matrix4 hudInvProjMatrix; +    private int hudCorrection; +    private int hudLeft; +    private int hudBottom; -    public GameCamera(float virtualWidth, float virtualHeight, float zoomOut, float zoomIn) +    public GameCamera(float virtualWidth, float virtualHeight, float zoomOut, float zoomIn, int hudCorrection)      {          super(virtualWidth, virtualHeight);          this.zoomOut = zoomOut; @@ -36,6 +39,9 @@ public class GameCamera extends OrthographicCamera          this.window = new Rectangle();          this.hudMatrix = new Matrix4();          this.hudInvProjMatrix = new Matrix4(); +        this.hudLeft = 0; +        this.hudBottom = 0; +        this.hudCorrection = hudCorrection;      }      public void updateViewport(int screenWidth, int screenHeight) @@ -52,12 +58,16 @@ public class GameCamera extends OrthographicCamera              window.x = ((screenWidth - window.width) / 2f);              window.y = 0f;              viewportWidth = (viewportHeight * (window.width / window.height)); +            hudBottom = hudCorrection; +            hudLeft = (int) (hudBottom * viewportWidth / viewportHeight);          } else if (diff > ZEROF) {              window.width = screenWidth;              window.height = java.lang.Math.min((screenWidth * viewportAspect / zoom), screenHeight);              window.x = 0f;              window.y = ((screenHeight - window.height) / 2f);              viewportHeight = (viewportWidth * (window.height / window.width)); +            hudLeft = hudCorrection; +            hudBottom = (int) (hudLeft / viewportWidth * viewportHeight);          }          Gdx.gl.glViewport((int)window.x, (int)window.y, (int)window.width, (int)window.height); @@ -68,7 +78,7 @@ public class GameCamera extends OrthographicCamera          clampPosition();          update(true);          hudMatrix.set(combined); -        hudMatrix.setToOrtho2D(0, 0, window.width, window.height); +        hudMatrix.setToOrtho2D(getHudLeft(), getHudBottom(), getHudWidth(), getHudHeight());          hudInvProjMatrix.set(hudMatrix);          Matrix4.inv(hudInvProjMatrix.val);      } @@ -88,14 +98,24 @@ public class GameCamera extends OrthographicCamera          return screenHeight;      } +    public int getHudLeft() +    { +        return hudLeft; +    } + +    public int getHudBottom() +    { +        return hudBottom; +    } +      public int getHudWidth()      { -        return (int) window.width; +        return (int) window.width - (2 * getHudLeft());      }      public int getHudHeight()      { -        return (int) window.height; +        return (int) window.height - (2 * getHudBottom());      }      public void centerOnWorld() diff --git a/core/src/ch/asynk/tankontank/screens/GameScreen.java b/core/src/ch/asynk/tankontank/screens/GameScreen.java index a71e52e..d5fa401 100644 --- a/core/src/ch/asynk/tankontank/screens/GameScreen.java +++ b/core/src/ch/asynk/tankontank/screens/GameScreen.java @@ -54,7 +54,7 @@ public class GameScreen implements Screen          this.batch = new SpriteBatch();          this.ctrl = new Ctrl(game, game.config.battle); -        this.cam = new GameCamera(ctrl.map.getWidth(),  ctrl.map.getHeight(), ZOOM_OUT_MAX, ZOOM_IN_MAX); +        this.cam = new GameCamera(ctrl.map.getWidth(),  ctrl.map.getHeight(), ZOOM_OUT_MAX, ZOOM_IN_MAX, game.hudCorrection);          if (DEBUG) this.debugShapes = new ShapeRenderer(); @@ -73,7 +73,7 @@ public class GameScreen implements Screen                      cam.zoom(ZOOM_GESTURE_FACTOR);                  else                      cam.zoom(-ZOOM_GESTURE_FACTOR); -                ctrl.hud.resize(cam.getHudWidth(), cam.getHudHeight()); +                ctrl.hud.resize(cam.getHudLeft(), cam.getHudBottom(), cam.getHudWidth(), cam.getHudHeight());                  blocked = true;                  inputDelay = INPUT_DELAY;                  return true; @@ -120,7 +120,7 @@ public class GameScreen implements Screen              public boolean scrolled(int amount)              {                  cam.zoom(amount * ZOOM_SCROLL_FACTOR); -                ctrl.hud.resize(cam.getHudWidth(), cam.getHudHeight()); +                ctrl.hud.resize(cam.getHudLeft(), cam.getHudBottom(), cam.getHudWidth(), cam.getHudHeight());                  return true;              }          }); @@ -179,7 +179,7 @@ public class GameScreen implements Screen      {          // TankOnTank.debug("GameScreen", "resize (" + width + "," + height + ")");          cam.updateViewport(width, height); -        ctrl.hud.resize(cam.getHudWidth(), cam.getHudHeight()); +        ctrl.hud.resize(cam.getHudLeft(), cam.getHudBottom(), cam.getHudWidth(), cam.getHudHeight());      }      @Override diff --git a/core/src/ch/asynk/tankontank/screens/MenuCamera.java b/core/src/ch/asynk/tankontank/screens/MenuCamera.java index 99edc87..9e27f16 100644 --- a/core/src/ch/asynk/tankontank/screens/MenuCamera.java +++ b/core/src/ch/asynk/tankontank/screens/MenuCamera.java @@ -13,11 +13,14 @@ public class MenuCamera extends OrthographicCamera      private float virtualAspect;      private final Rectangle virtual;      private final Rectangle window; +    private int hudLeft; +    private int hudBottom; +    private int hudCorrection;      private Matrix4 uiMatrix;      private Matrix4 uiInvProjMatrix; -    public MenuCamera(int cx, int cy, int width, int height) +    public MenuCamera(int cx, int cy, int width, int height, int hudCorrection)      {          super(width, height);          this.virtual = new Rectangle(); @@ -26,6 +29,9 @@ public class MenuCamera extends OrthographicCamera          this.window = new Rectangle();          this.window.set(0, 0, 0, 0);          this.position.set(virtual.x, virtual.y, 0f); +        this.hudLeft = 0; +        this.hudBottom = 0; +        this.hudCorrection = hudCorrection;          this.uiMatrix = new Matrix4();          this.uiInvProjMatrix = new Matrix4(); @@ -44,15 +50,17 @@ public class MenuCamera extends OrthographicCamera              viewportHeight = (virtual.width / aspect);          } -        window.width= screenWidth; -        window.height= screenHeight; +        window.width = screenWidth; +        window.height = screenHeight; +        hudLeft = hudCorrection; +        hudBottom = (int) (hudLeft / aspect);          Gdx.gl.glViewport((int)window.x, (int)window.y, (int)window.width, (int)window.height);          update(true);          uiMatrix.set(combined); -        uiMatrix.setToOrtho2D(0, 0, screenWidth, screenHeight); +        uiMatrix.setToOrtho2D(getHudLeft(), getHudBottom(), getHudWidth(), getHudHeight());          uiInvProjMatrix.set(uiMatrix);          Matrix4.inv(uiInvProjMatrix.val);      } @@ -67,6 +75,26 @@ public class MenuCamera extends OrthographicCamera          return window.height;      } +    public int getHudLeft() +    { +        return hudLeft; +    } + +    public int getHudBottom() +    { +        return hudBottom; +    } + +    public int getHudWidth() +    { +        return (int) window.width - (2 * getHudLeft()); +    } + +    public int getHudHeight() +    { +        return (int) window.height - (2 * getHudBottom()); +    } +      public void uiUnproject(float x, float y, Vector3 v)      {          x = x - window.x; diff --git a/core/src/ch/asynk/tankontank/screens/MenuScreen.java b/core/src/ch/asynk/tankontank/screens/MenuScreen.java index cc6d567..f47ba2d 100644 --- a/core/src/ch/asynk/tankontank/screens/MenuScreen.java +++ b/core/src/ch/asynk/tankontank/screens/MenuScreen.java @@ -67,7 +67,7 @@ public class MenuScreen implements Screen          float width = Gdx.graphics.getWidth();          float height = Gdx.graphics.getHeight(); -        this.camera = new MenuCamera(V_CENTER_X, V_CENTER_Y, V_WIDTH, V_HEIGHT); +        this.camera = new MenuCamera(V_CENTER_X, V_CENTER_Y, V_WIDTH, V_HEIGHT, game.hudCorrection);          this.gameAssetsLoading = false; @@ -208,7 +208,7 @@ public class MenuScreen implements Screen      private void update(int width, int height)      {          camera.updateViewport(width, height); -        Position.update(width, height); +        Position.update(camera.getHudLeft(), camera.getHudBottom(), camera.getHudWidth(), camera.getHudHeight());          setCenteredPosition(from, xPath[0], yPath[0]);          setCenteredPosition(to, xPath[n - 1], yPath[n - 1]); | 
