diff --git a/core/src/com/mygdx/game/GameScreens/GamePlay.java b/core/src/com/mygdx/game/GameScreens/GamePlay.java index 0cab30e1b39843ea301845b3fe485a83530ba305..2b7a4543ecd7d6fd8640ee11d4b2273044378563 100644 --- a/core/src/com/mygdx/game/GameScreens/GamePlay.java +++ b/core/src/com/mygdx/game/GameScreens/GamePlay.java @@ -15,6 +15,9 @@ import com.badlogic.gdx.physics.box2d.Fixture; import com.badlogic.gdx.physics.box2d.FixtureDef; import com.badlogic.gdx.physics.box2d.Shape; import com.badlogic.gdx.physics.box2d.World; +import com.mygdx.game.bodies.Ball; +import com.mygdx.game.bodies.Field; +import com.mygdx.game.bodies.Player; /** * Gameplay screen, allowing the user to play against an IA or another player on a shared screen @@ -22,49 +25,34 @@ import com.badlogic.gdx.physics.box2d.World; */ public class GamePlay extends GameScreen { - Texture game_field, pad_left, pad_right, goal_left, goal_right, player_left, player_right, ball; + Ball ball; + Player pleft, pright; + Field field; World world; - Body b_ball; Box2DDebugRenderer b2dd; @Override public void buildStage() { - game_field = new Texture(Gdx.files.internal("images/Terrain.png")); - pad_left = new Texture(Gdx.files.internal("images/Pad.png")); - pad_right = new Texture(Gdx.files.internal("images/Pad.png")); - goal_left = new Texture(Gdx.files.internal("images/But.bmp")); - goal_right = new Texture(Gdx.files.internal("images/But.bmp")); - player_left = new Texture(Gdx.files.internal("images/JoueurGauche.png")); - player_right = new Texture(Gdx.files.internal("images/JoueurDroite.png")); - ball = new Texture(Gdx.files.internal("images/Ballon.png")); - world = new World(new Vector2(0, 0), true); - - BodyDef bd_ball = new BodyDef(); - bd_ball.type = BodyDef.BodyType.DynamicBody; - bd_ball.position.set(width()/2, height()/2); - - b_ball = world.createBody(bd_ball); - - FixtureDef fd_ball = new FixtureDef(); - fd_ball.shape = new CircleShape(); - fd_ball.shape.setRadius((1/85f) * width()); - - Fixture f = b_ball.createFixture(fd_ball); - - b2dd = new Box2DDebugRenderer(); + field = new Field(world); + ball = new Ball(world, new Vector2(Gdx.graphics.getWidth()/2f, Gdx.graphics.getHeight()/2f)); + pleft = new Player(world, Player.TYPE.LEFT); + pright = new Player(world, Player.TYPE.RIGHT); } @Override public void render(float delta) { beforeRender(); - batch.draw(game_field, width()*0.1f, 0, width()*0.8f, height()); + field.draw(batch); + + pleft.draw(batch); + + pright.draw(batch); - batch.draw(ball, b_ball.getPosition().x, b_ball.getPosition().y, (1/85f)*width(), (1/85f)*width()); - //b2dd.render(world, getCamera().combined); + ball.draw(batch); world.step(delta, 1, 1); diff --git a/core/src/com/mygdx/game/TableFootball.java b/core/src/com/mygdx/game/TableFootball.java index 30a8f5ced6894887d65df39b06dabe706431d234..d070bfa148e77a064375a0457e18d951d3517c5f 100644 --- a/core/src/com/mygdx/game/TableFootball.java +++ b/core/src/com/mygdx/game/TableFootball.java @@ -26,7 +26,8 @@ public class TableFootball extends Game { } @Override - public void dispose () { - int a = 10; + public void dispose () + { + } } diff --git a/core/src/com/mygdx/game/bodies/Ball.java b/core/src/com/mygdx/game/bodies/Ball.java new file mode 100644 index 0000000000000000000000000000000000000000..b6015a7f54a4c008139ddaf182938d27056c8217 --- /dev/null +++ b/core/src/com/mygdx/game/bodies/Ball.java @@ -0,0 +1,50 @@ +package com.mygdx.game.bodies; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.CircleShape; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.World; + +public class Ball +{ + private TextureBody tb; + + public Ball(World world, Vector2 pos) + { + BodyDef bdef = new BodyDef(); + bdef.type = BodyDef.BodyType.DynamicBody; + bdef.position.set(pos); + + FixtureDef fdef = new FixtureDef(); + + CircleShape cs = new CircleShape(); + cs.setRadius(Gdx.graphics.getWidth() * (1f/85f)); + + fdef.shape = cs; + fdef.density = 1f; + fdef.restitution = 0.5f; + fdef.friction = 1.5f; + + tb = new TextureBody(Gdx.files.internal("images/Ballon.png"), world, bdef, fdef, cs.getRadius(), cs.getRadius()); + } + + public Texture texture() + { + return tb; + } + + public Body body() + { + return tb.body; + } + + public void draw(SpriteBatch batch) + { + tb.draw(batch); + } +} diff --git a/core/src/com/mygdx/game/bodies/Field.java b/core/src/com/mygdx/game/bodies/Field.java new file mode 100644 index 0000000000000000000000000000000000000000..8c51c24670de7dd9825da830faa815337cb5d46c --- /dev/null +++ b/core/src/com/mygdx/game/bodies/Field.java @@ -0,0 +1,52 @@ +package com.mygdx.game.bodies; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.CircleShape; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.PolygonShape; +import com.badlogic.gdx.physics.box2d.World; + +public class Field +{ + private TextureBody tb; + + public Field(World world) + { + BodyDef bdef = new BodyDef(); + bdef.type = BodyDef.BodyType.StaticBody; + bdef.active = false; + bdef.position.set(Gdx.graphics.getWidth()*0.1f, 0); + + FixtureDef fdef = new FixtureDef(); + + PolygonShape ps = new PolygonShape(); + ps.setAsBox(Gdx.graphics.getWidth()*0.8f, Gdx.graphics.getHeight()); + + fdef.shape = ps; + fdef.density = 0f; + fdef.restitution = 0f; + fdef.friction = 0f; + + tb = new TextureBody(Gdx.files.internal("images/Terrain.png"), world, bdef, fdef, Gdx.graphics.getWidth()*0.8f, Gdx.graphics.getHeight()); + } + + public Texture texture() + { + return tb; + } + + public Body body() + { + return tb.body; + } + + public void draw(SpriteBatch batch) + { + tb.draw(batch); + } +} diff --git a/core/src/com/mygdx/game/bodies/Player.java b/core/src/com/mygdx/game/bodies/Player.java new file mode 100644 index 0000000000000000000000000000000000000000..413c5cb8eef7478f1f9efa845f978f963f3322a3 --- /dev/null +++ b/core/src/com/mygdx/game/bodies/Player.java @@ -0,0 +1,56 @@ +package com.mygdx.game.bodies; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.CircleShape; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.World; + +public class Player +{ + private TextureBody tb; + + public Player(World world, Player.TYPE playerType) + { + BodyDef bdef = new BodyDef(); + bdef.type = BodyDef.BodyType.DynamicBody; + Vector2 pos = playerType == TYPE.RIGHT ? new Vector2(Gdx.graphics.getWidth()*0.75f, Gdx.graphics.getHeight()/2f) : new Vector2(Gdx.graphics.getWidth()*0.25f, Gdx.graphics.getHeight()/2f); + bdef.position.set(pos); + + FixtureDef fdef = new FixtureDef(); + + CircleShape cs = new CircleShape(); + cs.setRadius(Gdx.graphics.getWidth() * (1f/40f)); + + fdef.shape = cs; + fdef.density = 1f; + fdef.restitution = 0.25f; + fdef.friction = 1.5f; + + tb = new TextureBody(Gdx.files.internal( "images/Joueur" + (playerType == TYPE.RIGHT ? "Droite" : "Gauche") + ".png"), world, bdef, fdef, cs.getRadius(), cs.getRadius()); + } + + public Texture texture() + { + return tb; + } + + public Body body() + { + return tb.body; + } + + public void draw(SpriteBatch batch) + { + tb.draw(batch); + } + + public enum TYPE + { + LEFT, RIGHT, AI + } +} diff --git a/core/src/com/mygdx/game/bodies/TextureBody.java b/core/src/com/mygdx/game/bodies/TextureBody.java new file mode 100644 index 0000000000000000000000000000000000000000..9f088508574081d969372c016e4b7719e9afc4cc --- /dev/null +++ b/core/src/com/mygdx/game/bodies/TextureBody.java @@ -0,0 +1,32 @@ +package com.mygdx.game.bodies; + +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.Fixture; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.World; + +public class TextureBody extends Texture +{ + protected Body body; + protected Fixture fixture; + protected float width, height; + + public TextureBody(FileHandle fh, World world, BodyDef bdef, FixtureDef fdef, float w, float h) { + super(fh); + + width = w; + height = h; + body = world.createBody(bdef); + fixture = body.createFixture(fdef); + } + + public void draw(SpriteBatch batch) + { + batch.draw(this, body.getPosition().x, body.getPosition().y, width, height); + } +}