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