From e5f96feea10246553528e4b71fdac1b486858c4b Mon Sep 17 00:00:00 2001 From: magnsskj <magnsskj@stud.ntnu.no> Date: Wed, 5 Apr 2023 14:01:05 +0200 Subject: [PATCH] (#34): methods for rotating cannon in tank --- .../tankwars/controller/GameController.java | 16 ++++++++++++++++ .../core/src/com/game/tankwars/model/Tank.java | 17 +++++++++++++++++ .../src/com/game/tankwars/view/GameScreen.java | 4 +++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/frontend/core/src/com/game/tankwars/controller/GameController.java b/frontend/core/src/com/game/tankwars/controller/GameController.java index 78b7051..0d56609 100644 --- a/frontend/core/src/com/game/tankwars/controller/GameController.java +++ b/frontend/core/src/com/game/tankwars/controller/GameController.java @@ -2,6 +2,8 @@ package com.game.tankwars.controller; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; @@ -21,6 +23,8 @@ public class GameController { private Bullet bullet; + private Vector3 touchPos; + private boolean moveRightTouched; private boolean moveLeftTouched; @@ -28,6 +32,8 @@ public class GameController { this.hud = hud; this.tank = tank; this.tankWarsGame = tankWarsGame; + + this.touchPos = new Vector3(); } public void checkKeyInput(Tank tank){ @@ -96,6 +102,16 @@ public class GameController { } + public void handleTouchInput(OrthographicCamera camera) { + if(Gdx.input.isTouched()) { + touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0); + camera.unproject(touchPos); + + tank.rotateCannon(touchPos); + + } + } + public boolean endPlayerTurn() { System.out.println(tank.getPower()); System.out.println(tank.getPosition()); diff --git a/frontend/core/src/com/game/tankwars/model/Tank.java b/frontend/core/src/com/game/tankwars/model/Tank.java index b042a69..9be2cd6 100644 --- a/frontend/core/src/com/game/tankwars/model/Tank.java +++ b/frontend/core/src/com/game/tankwars/model/Tank.java @@ -3,8 +3,10 @@ package com.game.tankwars.model; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.FixtureDef; @@ -161,6 +163,21 @@ public class Tank { } } + public void rotateCannon(Vector3 touchPos) { + if(cannonAngle > 90 || cannonAngle < -90) { + return; + } + cannonAngle = calculateAngleFromTouch(touchPos); + } + + private float calculateAngleFromTouch(Vector3 touchPos) { + System.out.println(touchPos.toString()); + float angle = (MathUtils.atan2(touchPos.y, touchPos.x)) - (MathUtils.atan2(chassis.getPosition().y, chassis.getPosition().x)); + angle *= MathUtils.radiansToDegrees; + System.out.println(angle); + return angle; + } + public float getCannonAngle(){ return cannonAngle; } diff --git a/frontend/core/src/com/game/tankwars/view/GameScreen.java b/frontend/core/src/com/game/tankwars/view/GameScreen.java index f088512..dbe7434 100644 --- a/frontend/core/src/com/game/tankwars/view/GameScreen.java +++ b/frontend/core/src/com/game/tankwars/view/GameScreen.java @@ -106,6 +106,8 @@ public class GameScreen implements Screen { controller.checkKeyInput(myTank); + controller.handleTouchInput(worldCam); + Array<Body> bodies = new Array<Body>(); world.getBodies(bodies); @@ -114,7 +116,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(myTank.getChassisSprite())) { s.setRotation(myTank.getAngle()); } -- GitLab