From 6a38f7762f729ff6cbb74ec9c66f323a152ff239 Mon Sep 17 00:00:00 2001 From: magnsskj <magnsskj@stud.ntnu.no> Date: Thu, 30 Mar 2023 14:27:21 +0200 Subject: [PATCH] (#18): add camera for hud and world + scaling of camera --- .../com/game/tankwars/view/GameScreen.java | 55 ++++++++++--------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/frontend/core/src/com/game/tankwars/view/GameScreen.java b/frontend/core/src/com/game/tankwars/view/GameScreen.java index 136be89..96c2369 100644 --- a/frontend/core/src/com/game/tankwars/view/GameScreen.java +++ b/frontend/core/src/com/game/tankwars/view/GameScreen.java @@ -6,19 +6,13 @@ import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Mesh; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.Sprite; -import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.ScreenUtils; -import com.badlogic.gdx.utils.viewport.FitViewport; -import com.badlogic.gdx.utils.viewport.Viewport; import com.badlogic.gdx.utils.viewport.FitViewport; import com.game.tankwars.TankWarsGame; import com.game.tankwars.controller.GameController; @@ -29,8 +23,7 @@ import com.game.tankwars.model.Terrain; public class GameScreen implements Screen { final TankWarsGame tankWarsGame; - int VIEWPORT_WIDTH; - int VIEWPORT_HEIGHT; + int horizontalScaling; int verticalScaling; SpriteBatch batch; @@ -40,7 +33,8 @@ public class GameScreen implements Screen { Box2dWorld model; World world; Terrain terrain; - OrthographicCamera cam; + OrthographicCamera worldCam; + OrthographicCamera hudCam; Box2DDebugRenderer debugRenderer; Bullet bullet; GameController controller; @@ -49,30 +43,34 @@ public class GameScreen implements Screen { public GameScreen(final TankWarsGame tankWarsGame){ this.tankWarsGame = tankWarsGame; - VIEWPORT_HEIGHT = tankWarsGame.getViewportHeight(); - VIEWPORT_WIDTH = tankWarsGame.getViewportWidth(); - batch = new SpriteBatch(); shapeRender = new ShapeRenderer(); + model = new Box2dWorld(); world = Box2dWorld.getWorld(); - cam = new OrthographicCamera(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); - cam.position.set(VIEWPORT_WIDTH/2, VIEWPORT_HEIGHT/2, 0); - cam.update(); + + worldCam = new OrthographicCamera(scale(TankWarsGame.GAMEPORT_WIDTH), scale(TankWarsGame.GAMEPORT_HEIGHT)); + worldCam.position.set(scale(TankWarsGame.GAMEPORT_WIDTH)/2, scale(TankWarsGame.GAMEPORT_HEIGHT)/2, 0); + + hudCam = new OrthographicCamera(TankWarsGame.GAMEPORT_WIDTH, TankWarsGame.GAMEPORT_HEIGHT); + hudCam.position.set(TankWarsGame.GAMEPORT_WIDTH/2, TankWarsGame.GAMEPORT_HEIGHT/2, 0); + + worldCam.update(); + hudCam.update(); + debugRenderer = new Box2DDebugRenderer(true, true, true, true, true, true); terrain = new Terrain(); int initPos = 50; tank = new Tank(initPos, new Texture("tank-khaki.png"), new Texture("cannon.png"),terrain, tankWarsGame); - horizontalScaling = Gdx.graphics.getWidth() / VIEWPORT_WIDTH; - verticalScaling = Gdx.graphics.getHeight() / VIEWPORT_HEIGHT; + /*horizontalScaling = Gdx.graphics.getWidth() / VIEWPORT_WIDTH; + verticalScaling = Gdx.graphics.getHeight() / VIEWPORT_HEIGHT;*/ - hud = new GameHud(new FitViewport(VIEWPORT_WIDTH, VIEWPORT_HEIGHT, cam), batch); + hud = new GameHud(new FitViewport(TankWarsGame.GAMEPORT_WIDTH, TankWarsGame.GAMEPORT_HEIGHT, hudCam), batch); + Gdx.input.setInputProcessor(hud.getStage()); controller = new GameController(tankWarsGame, hud, tank); - - Gdx.input.setInputProcessor(hud.getStage()); controller.handleHudEvents(); } @Override @@ -80,8 +78,8 @@ public class GameScreen implements Screen { model.logicStep(Gdx.graphics.getDeltaTime()); Gdx.gl.glClearColor(0, 0, 100, 100); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - debugRenderer.render(world, cam.combined); - shapeRender.setProjectionMatrix(cam.combined); + debugRenderer.render(world, worldCam.combined); + shapeRender.setProjectionMatrix(worldCam.combined); controller.checkKeyInput(); @@ -93,7 +91,7 @@ public class GameScreen implements Screen { Sprite s = (Sprite) b.getUserData(); if (s != null) { - s.setPosition(b.getPosition().x * (float) horizontalScaling - s.getWidth() / 2, (b.getPosition().y + 0.25f) * (float) verticalScaling); + s.setPosition(b.getPosition().x * (float) TankWarsGame.SCALE - s.getWidth() / 2, (b.getPosition().y + 0.25f) * (float) TankWarsGame.SCALE); if (s.equals(tank.getChassisSprite())) { s.setRotation(tank.getAngle()); } @@ -102,8 +100,7 @@ public class GameScreen implements Screen { s.setRotation(tank.getCannonAngle()); } } - - hud.getStage().draw(); + } shapeRender.begin(ShapeRenderer.ShapeType.Filled); terrain.draw(shapeRender); @@ -113,12 +110,16 @@ public class GameScreen implements Screen { tank.getChassisSprite().draw(batch); tank.getCannonSprite().draw(batch); batch.end(); + + batch.setProjectionMatrix(hud.getStage().getCamera().combined); + hud.getStage().draw(); } @Override public void show() { } + @Override public void resize(int width, int height) { @@ -147,4 +148,8 @@ public class GameScreen implements Screen { batch.dispose(); shapeRender.dispose(); } + + private float scale(float value) { + return value / TankWarsGame.SCALE; + } } -- GitLab