From 22975613b7f9a3eedc2e3efc4f696b2624ff1ffc 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  |  2 ++
 3 files changed, 35 insertions(+)

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 8db938a..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);
 
-- 
GitLab