diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2015-07-16 10:50:58 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2015-07-16 10:50:58 +0200 |
commit | ca8c34144e0eaa40b668f16c91382dea6266b24c (patch) | |
tree | 99ea6b0b3d451c68d2a2364d08c3a5b1ce7d95ea /core/src/ch | |
parent | 1b3386d68f36df345af399c0ea2c27bb29cd25a0 (diff) | |
download | RustAndDust-ca8c34144e0eaa40b668f16c91382dea6266b24c.zip RustAndDust-ca8c34144e0eaa40b668f16c91382dea6266b24c.tar.gz |
GameCamera: support fixed hud
Diffstat (limited to 'core/src/ch')
-rw-r--r-- | core/src/ch/asynk/creepingarmor/screens/GameCamera.java | 33 | ||||
-rw-r--r-- | core/src/ch/asynk/creepingarmor/screens/GameScreen.java | 5 |
2 files changed, 30 insertions, 8 deletions
diff --git a/core/src/ch/asynk/creepingarmor/screens/GameCamera.java b/core/src/ch/asynk/creepingarmor/screens/GameCamera.java index 9392c5d..9fa123f 100644 --- a/core/src/ch/asynk/creepingarmor/screens/GameCamera.java +++ b/core/src/ch/asynk/creepingarmor/screens/GameCamera.java @@ -28,8 +28,9 @@ public class GameCamera extends OrthographicCamera private int hudCorrection; private int hudLeft; private int hudBottom; + private boolean fixedHud; - public GameCamera(float virtualWidth, float virtualHeight, float zoomOut, float zoomIn, int hudCorrection) + public GameCamera(float virtualWidth, float virtualHeight, float zoomOut, float zoomIn, int hudCorrection, boolean fixedHud) { super(virtualWidth, virtualHeight); this.zoomOut = zoomOut; @@ -42,6 +43,7 @@ public class GameCamera extends OrthographicCamera this.hudMatrix = new Matrix4(); this.hudInvProjMatrix = new Matrix4(); this.hudCorrection = hudCorrection; + this.fixedHud = fixedHud; } public void updateViewport(int screenWidth, int screenHeight) @@ -73,8 +75,15 @@ public class GameCamera extends OrthographicCamera hud.y = (hud.x * viewportHeight / viewportWidth); } - hud.width = (window.width - (2 * hud.x)); - hud.height = (window.height - (2 * hud.y)); + if (fixedHud) { + hud.x = 0; + hud.y = 0; + hud.width = screenWidth; + hud.height = screenHeight; + } else { + hud.width = (window.width - (2 * hud.x)); + hud.height = (window.height - (2 * hud.y)); + } widthFactor = (viewportWidth / screenWidth); heightFactor = (viewportHeight / screenHeight); @@ -84,10 +93,19 @@ public class GameCamera extends OrthographicCamera hudMatrix.setToOrtho2D(hud.x, hud.y, hud.width, hud.height); hudInvProjMatrix.set(hudMatrix); Matrix4.inv(hudInvProjMatrix.val); + } + public void applyMapViewport() + { Gdx.gl.glViewport((int)window.x, (int)window.y, (int)window.width, (int)window.height); } + public void applyHudViewport() + { + if (fixedHud) + Gdx.gl.glViewport(0, 0, screenWidth, screenHeight); + } + public Matrix4 getHudMatrix() { return hudMatrix; @@ -182,11 +200,12 @@ public class GameCamera extends OrthographicCamera public void unprojectHud(float x, float y, Vector3 v) { - x = x - window.x; + Rectangle r = (fixedHud ? hud : window); + x = x - r.x; y = Gdx.graphics.getHeight() - y - 1; - y = y - window.y; - v.x = (2 * x) / window.width - 1; - v.y = (2 * y) / window.height - 1; + y = y - r.y; + v.x = (2 * x) / r.width - 1; + v.y = (2 * y) / r.height - 1; v.z = 2 * v.z - 1; v.prj(hudInvProjMatrix); } diff --git a/core/src/ch/asynk/creepingarmor/screens/GameScreen.java b/core/src/ch/asynk/creepingarmor/screens/GameScreen.java index 52b5139..5c3dcfc 100644 --- a/core/src/ch/asynk/creepingarmor/screens/GameScreen.java +++ b/core/src/ch/asynk/creepingarmor/screens/GameScreen.java @@ -23,6 +23,7 @@ public class GameScreen implements Screen { private static boolean DEBUG = false; + private static final boolean FIXED_HUD = true; private static final float INPUT_DELAY = 0.1f; private static final float ZOOM_IN_MAX = 0.3f; private static final float ZOOM_OUT_MAX = 1f; @@ -54,7 +55,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, game.hudCorrection); + this.cam = new GameCamera(ctrl.map.getWidth(), ctrl.map.getHeight(), ZOOM_OUT_MAX, ZOOM_IN_MAX, game.hudCorrection, FIXED_HUD); if (DEBUG) this.debugShapes = new ShapeRenderer(); @@ -144,6 +145,7 @@ public class GameScreen implements Screen Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // cam.update(); + cam.applyMapViewport(); batch.setProjectionMatrix(cam.combined); batch.begin(); ctrl.map.draw(batch); @@ -159,6 +161,7 @@ public class GameScreen implements Screen debugShapes.end(); } + cam.applyHudViewport(); batch.setProjectionMatrix(cam.getHudMatrix()); batch.begin(); ctrl.hud.draw(batch, DEBUG); |