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