From dcc59cb59369c5fe0e2ce353cbd57e0f65f22ccc Mon Sep 17 00:00:00 2001
From: Jan Einar Thorvaldsen <janetho@stud.ntnu.no>
Date: Thu, 13 Apr 2023 19:43:04 +0200
Subject: [PATCH] #42 fixed client-side render of tanks

---
 frontend/assets/camo-tank-1.png               | Bin 0 -> 444 bytes
 frontend/assets/camo-tank-barrel.png          | Bin 0 -> 852 bytes
 .../src/com/game/tankwars/TankWarsGame.java   |   3 +-
 .../src/com/game/tankwars/model/Tank.java     |  29 +++++++++--------
 .../com/game/tankwars/view/GameScreen.java    |  30 +++++++++++-------
 5 files changed, 35 insertions(+), 27 deletions(-)
 create mode 100644 frontend/assets/camo-tank-1.png
 create mode 100644 frontend/assets/camo-tank-barrel.png

diff --git a/frontend/assets/camo-tank-1.png b/frontend/assets/camo-tank-1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1952d6fb49a44b6599d5d6802407114f5353f42f
GIT binary patch
literal 444
zcmV;t0Ym<YP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px$c1c7*R9HvtRIyIOKn%Su2nGZ*BMhih0fFe!AK-)efi6WLXs3z+MrKe4Dwd#U
z<((Yk+$9<4a<?RL?C0lapGRTGXVfu&<@j}tO{U0!NaFEqA|QK*`||wRY{PoKvcNek
zmq;$CvdKw+Xh)l^ye^inc;xW@kjMp8(~ENn`aU^s1VaTT{}%$xu8ACce2V$2ZcW{m
zTv3fe=<E$ynB3il)%`=D3LXh4!84RV?6a0s%MKD<4v5yXkaBM*gpUf9vJ#S@ta|c^
z>e)1Tw#mb^Dn$YS*OhYm?X=rA=oXNecU7Sdih@s_N0f*JnEdo?9Nyp74GB{-V6Ua#
z55U499%o8lS0MnW%d4q4zdSDjNx+8hKF7nkzL^Qc)8m{_aSq}w(8(+T{u^os0WUdQ
zKvtrJmCdWDO)<}|Ti|U<yEI%9nwSBMgxl<Dp4<i1wzb^F)MplyZ*nvCTAKq2B*O}U
mqCiogC{PqA3KRu)uD~zQaMd9xP5F2L0000<MNUMnLSTXil*EMq

literal 0
HcmV?d00001

diff --git a/frontend/assets/camo-tank-barrel.png b/frontend/assets/camo-tank-barrel.png
new file mode 100644
index 0000000000000000000000000000000000000000..30c592bb706069f4a133f11b6d5f218e33432514
GIT binary patch
literal 852
zcmeAS@N?(olHy`uVBq!ia0vp^EI=&8!3HF2>gs=h1kxRS9T^xl_H+M9WCijSl0AZa
z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP$D2T!ZXd+mq822=3roA
z6k=covKWDop*<696_CXMGzkcp7ce4Z7cjwPSr#zE*+L+N7J{4X7#NuJGeaUuB7A+U
zlJj%*5>xV%QuQiw3qT4OY$~jP%-qzHM1_jnoV;SI3R@+x3M(KRB&@Hb09I0xZL1XF
z8=&BvUzDm~re~mMpk&9TprBw=l#*r@<l+X^4&>P?Wt5Z@Sn2DRmzV368|&p4rRy77
zT3YHG80i}s=>k>g7FXt#Bv$C=6)QswftllyTAW;zSx}OhpQivaH!&%{w8U0P31kr*
zK-`&Hk%_P=uNdkrpa=CqGWv#k2Kv~vm1L&j&<2u$XaoBTVx0}hFsp#fiqxD)m(1MM
zykel!><lezz_wsWAlwPj=$xOEUld%Bn4D^72-SilgsvKFO$5Rk6J%SE#F6xY9Bt)a
zl$i<)Pf)0Vtice2s<+Vx1u0SxL*frC3XDKIE*pJ#VzA@t3fN`_OdlSeE{-7*lF2Cv
z2|xIc7#ujkl9YMt)nOKi155>S6B=V1{(t7*q4Y-U!6gIZecqf0j&8{Q>AGuS%iYGS
mQ7iiYC+}z$eBm;Mfr+8Cnm65{!cG#D=saEhT-G@yGywo`&++R3

literal 0
HcmV?d00001

diff --git a/frontend/core/src/com/game/tankwars/TankWarsGame.java b/frontend/core/src/com/game/tankwars/TankWarsGame.java
index befe4b7..375ab3c 100644
--- a/frontend/core/src/com/game/tankwars/TankWarsGame.java
+++ b/frontend/core/src/com/game/tankwars/TankWarsGame.java
@@ -9,6 +9,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.graphics.g2d.BitmapFont;
 
 import com.game.tankwars.view.FindGameScreen;
+import com.game.tankwars.view.GameScreen;
 import com.game.tankwars.view.LoginScreen;
 
 public class TankWarsGame extends Game {
@@ -25,7 +26,7 @@ public class TankWarsGame extends Game {
 
 	@Override
 	public void create() {
-		this.setScreen(new LoginScreen(this));
+		this.setScreen(new GameScreen(this));
 	}
 
 	public int getViewportWidth(){
diff --git a/frontend/core/src/com/game/tankwars/model/Tank.java b/frontend/core/src/com/game/tankwars/model/Tank.java
index b042a69..41236a4 100644
--- a/frontend/core/src/com/game/tankwars/model/Tank.java
+++ b/frontend/core/src/com/game/tankwars/model/Tank.java
@@ -37,11 +37,13 @@ public class Tank {
     Terrain terrain;
     private Vector2[] vertices;
     int posInVertArr;
-    float cannonAngle = 90;
+    float cannonAngle;
     private int power;
     boolean directionLeft;
+    int fuel = 150;
+    int health = 100;
 
-    public Tank(int posInVertArr, Texture chassisTexture, Texture cannonTexture, Terrain terrain, TankWarsGame tankWarsGame, boolean directionLeft) {
+    public Tank(int posInVertArr, Texture chassisTexture, Texture cannonTexture, Terrain terrain, TankWarsGame tankWarsGame, boolean directionLeft, float cannonAngle) {
         VIEWPORT_HEIGHT = tankWarsGame.getViewportHeight();
         VIEWPORT_WIDTH = tankWarsGame.getViewportWidth();
 
@@ -52,16 +54,15 @@ public class Tank {
         position = vertices[posInVertArr];
 
         this.power = 25;
+        this.cannonAngle = cannonAngle;
 
         this.bounds = new Rectangle(position.x, position.y, TANK_WIDTH, TANK_HEIGHT);
 
         this.chassisTexture = chassisTexture;
         chassisSprite = new Sprite(chassisTexture);
-        chassisSprite.scale(0.4f);
 
         this.cannonTexture = cannonTexture;
         cannonSprite = new Sprite(cannonTexture);
-        cannonSprite.scale(-0.1f);
 
         world = Box2dWorld.getWorld();
         bodyDef.type = BodyDef.BodyType.KinematicBody;
@@ -75,11 +76,12 @@ public class Tank {
         chassis = world.createBody(bodyDef);
         chassis.setUserData(chassisSprite);
         chassis.createFixture(fixtureDef);
+        chassisSprite.scale(0.2f);
 
         //Cannon
         shape.setAsBox(CANNON_WIDTH, CANNON_HEIGHT);
 
-        cannonSprite.setOrigin(0, cannonSprite.getHeight()/2);
+        cannonSprite.setOrigin(1, cannonSprite.getHeight()/2);
         cannon = world.createBody(bodyDef);
         cannon.setUserData(cannonSprite);
 
@@ -103,12 +105,13 @@ public class Tank {
             chassisSprite.flip(true, false);
             directionLeft = false;
         }
-        if (chassis.getPosition().x <= TankWarsGame.GAMEPORT_WIDTH - TANK_WIDTH){
+        if (chassis.getPosition().x <= TankWarsGame.GAMEPORT_WIDTH/TankWarsGame.SCALE - TANK_WIDTH && fuel > 0){
             setPosition(newPos);
             chassis.setTransform(newPos.x, newPos.y + 0.11f, angle);
             chassisSprite.setRotation(angle);
             updateCannonPos();
             posInVertArr++;
+            fuel--;
         }
         else {
             chassis.setTransform(curPos.x, curPos.y + 0.11f, angle);
@@ -125,12 +128,13 @@ public class Tank {
             directionLeft = true;
         }
 
-        if (chassis.getPosition().x >= TANK_WIDTH){
+        if (chassis.getPosition().x >= TANK_WIDTH && fuel > 0){
             setPosition(newPos);
             chassis.setTransform(newPos.x, newPos.y + 0.11f, angle);
             chassisSprite.setRotation(angle);
             updateCannonPos();
             posInVertArr--;
+            fuel--;
         }
         else {
             chassis.setTransform(curPos.x, curPos.y + 0.11f, angle);
@@ -145,18 +149,18 @@ public class Tank {
 
     public void updateCannonPos(){
         Vector2 chassisPos = chassis.getPosition();
-        chassisPos.add(0, 1);
+        chassisPos.add(0, 0.35f);
         cannon.setTransform(chassisPos, cannon.getAngle());
     }
 
     public void rotateCannonRight(){
-        if(cannonAngle > -90) {
+        if(cannonAngle > 90) {
             cannonAngle--;
         }
     }
 
     public void rotateCannonLeft(){
-        if(cannonAngle < 90) {
+        if(cannonAngle < 270) {
             cannonAngle++;
         }
     }
@@ -179,23 +183,20 @@ public class Tank {
     }
     public Sprite getChassisSprite() {return chassisSprite;}
     public Sprite getCannonSprite() {return cannonSprite;}
-
     public int getPower() {
         return power;
     }
+    public int getFuel(){return fuel;}
 
     public void setPosition(Vector2 position) {
         this.position = position;
     }
-
     public void setBounds(Rectangle bounds) {
         this.bounds = bounds;
     }
-
     public void setPower(int power) {
         this.power = power;
     }
-
     public void setChassisTexture(Texture texture) {
         this.chassisTexture = texture;
     }
diff --git a/frontend/core/src/com/game/tankwars/view/GameScreen.java b/frontend/core/src/com/game/tankwars/view/GameScreen.java
index 8db938a..5f52edb 100644
--- a/frontend/core/src/com/game/tankwars/view/GameScreen.java
+++ b/frontend/core/src/com/game/tankwars/view/GameScreen.java
@@ -26,6 +26,8 @@ import com.game.tankwars.model.Bullet;
 import com.game.tankwars.model.Tank;
 import com.game.tankwars.model.Terrain;
 
+import java.util.Arrays;
+
 public class GameScreen implements Screen {
     final TankWarsGame tankWarsGame;
     int VIEWPORT_WIDTH;
@@ -43,9 +45,7 @@ public class GameScreen implements Screen {
     OrthographicCamera worldCam;
     OrthographicCamera hudCam;
     Box2DDebugRenderer debugRenderer;
-    Bullet bullet;
     GameController controller;
-    Mesh groundMesh;
 
     public GameScreen(final TankWarsGame tankWarsGame){
         this.tankWarsGame = tankWarsGame;
@@ -73,18 +73,21 @@ public class GameScreen implements Screen {
         terrain = new Terrain();
 
         int myPos = 50;
-        int opponentPos = terrain.getVertices().length - 150;
+        int opponentPos = terrain.getVertices().length - 220;
 
         myTank = new Tank(myPos,
-                new Texture("tank-khaki.png"),
-                new Texture("cannon.png"),
+                new Texture("camo-tank-1.png"),
+                new Texture("camo-tank-barrel.png"),
                 terrain,
-                tankWarsGame, true);
+                tankWarsGame, true,
+                120);
         opponentTank = new Tank(opponentPos,
-                new Texture("tank-khaki.png"),
-                new Texture("cannon.png"),
+                new Texture("camo-tank-1.png"),
+                new Texture("camo-tank-barrel.png"),
                 terrain,
-                tankWarsGame, false);
+                tankWarsGame,
+                false,
+                225);
 
         horizontalScaling = Gdx.graphics.getWidth() / TankWarsGame.GAMEPORT_WIDTH;
         verticalScaling = Gdx.graphics.getHeight() / TankWarsGame.GAMEPORT_HEIGHT;
@@ -114,19 +117,22 @@ public class GameScreen implements Screen {
             Sprite s = (Sprite) b.getUserData();
 
             if (s != null) {
-                s.setPosition(b.getPosition().x * (float) TankWarsGame.SCALE - s.getWidth() / 2, (b.getPosition().y + 0.25f) * (float) TankWarsGame.SCALE);
+                s.setPosition(b.getPosition().x * (float) TankWarsGame.SCALE - s.getWidth() / 2,
+                        (b.getPosition().y * (float) TankWarsGame.SCALE) - s.getHeight()/2);
                 if (s.equals(myTank.getChassisSprite())) {
+                    s.setOrigin(s.getWidth() / 2, s.getHeight());
                     s.setRotation(myTank.getAngle());
                 }
                 if (s.equals(opponentTank.getChassisSprite())) {
+                    s.setOrigin(s.getWidth() / 2, s.getHeight());
                     s.setRotation(opponentTank.getAngle());
                 }
                 if (s.equals(myTank.getCannonSprite())) {
-                    s.setOrigin(s.getWidth() / 2, 0);
+                    s.setOrigin(s.getWidth() / 2, s.getHeight());
                     s.setRotation(myTank.getCannonAngle());
                 }
                 if (s.equals(opponentTank.getCannonSprite())) {
-                    s.setOrigin(s.getWidth() / s.getWidth(), 0);
+                    s.setOrigin(s.getWidth() / 2 , s.getHeight());
                     s.setRotation(opponentTank.getCannonAngle());
                 }
             }
-- 
GitLab