summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2015-07-16 10:50:58 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2015-07-16 10:50:58 +0200
commitca8c34144e0eaa40b668f16c91382dea6266b24c (patch)
tree99ea6b0b3d451c68d2a2364d08c3a5b1ce7d95ea /core
parent1b3386d68f36df345af399c0ea2c27bb29cd25a0 (diff)
downloadRustAndDust-ca8c34144e0eaa40b668f16c91382dea6266b24c.zip
RustAndDust-ca8c34144e0eaa40b668f16c91382dea6266b24c.tar.gz
GameCamera: support fixed hud
Diffstat (limited to 'core')
-rw-r--r--core/src/ch/asynk/creepingarmor/screens/GameCamera.java33
-rw-r--r--core/src/ch/asynk/creepingarmor/screens/GameScreen.java5
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);