From 23281d86981be53889e51460cfaae610eae27da4 Mon Sep 17 00:00:00 2001 From: timeo <timeo.jacquier@hotmail.com> Date: Tue, 7 Dec 2021 16:07:28 +0100 Subject: [PATCH] 1 boite tombe sur une plateforme --- .../src/com/mygdx/game/AndroidLauncher.java | 16 ++++ core/src/com/mygdx/game/PlatVenture.java | 65 ++++++++++++++ core/src/etat/GameState.java | 30 +++++++ core/src/etat/Play.java | 85 +++++++++++++++++++ core/src/handlers/B2DVars.java | 6 ++ core/src/handlers/GameStateManager.java | 66 ++++++++++++++ .../mygdx/game/desktop/DesktopLauncher.java | 15 ++++ 7 files changed, 283 insertions(+) create mode 100644 android/src/com/mygdx/game/AndroidLauncher.java create mode 100644 core/src/com/mygdx/game/PlatVenture.java create mode 100644 core/src/etat/GameState.java create mode 100644 core/src/etat/Play.java create mode 100644 core/src/handlers/B2DVars.java create mode 100644 core/src/handlers/GameStateManager.java create mode 100644 desktop/src/com/mygdx/game/desktop/DesktopLauncher.java diff --git a/android/src/com/mygdx/game/AndroidLauncher.java b/android/src/com/mygdx/game/AndroidLauncher.java new file mode 100644 index 0000000..8add522 --- /dev/null +++ b/android/src/com/mygdx/game/AndroidLauncher.java @@ -0,0 +1,16 @@ +package com.mygdx.game; + +import android.os.Bundle; + +import com.badlogic.gdx.backends.android.AndroidApplication; +import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; +import com.mygdx.game.PlatVenture; + +public class AndroidLauncher extends AndroidApplication { + @Override + protected void onCreate (Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); + initialize(new PlatVenture(), config); + } +} diff --git a/core/src/com/mygdx/game/PlatVenture.java b/core/src/com/mygdx/game/PlatVenture.java new file mode 100644 index 0000000..062bc81 --- /dev/null +++ b/core/src/com/mygdx/game/PlatVenture.java @@ -0,0 +1,65 @@ +package com.mygdx.game; + +import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.utils.ScreenUtils; +import handlers.GameStateManager; + +public class PlatVenture extends ApplicationAdapter { + + public static final String Titre = "PlatVenture"; + public static final int largeur = 160; + public static final int hauteur = 120; + public static final int scale = 8; + + public static final float STEP = 1 /60f; // Pas entre deux images + private float accum; + + private SpriteBatch batch; + private OrthographicCamera cam; + private OrthographicCamera hudCam; + + private GameStateManager gsm; + + @Override + public void create () { + batch = new SpriteBatch(); + cam = new OrthographicCamera(); + cam.setToOrtho(false, largeur, hauteur); + hudCam = new OrthographicCamera(); + hudCam.setToOrtho(false, largeur, hauteur); + gsm = new GameStateManager(this); + } + + @Override + public void render () { + accum += Gdx.graphics.getDeltaTime(); // Récupération du temps depuis le dernier render + + // update seulement si suffisamment de temps est passé depuis la dernière étape + while (accum >= STEP){ + accum -= STEP; + gsm.update(STEP); + gsm.render(); + } + } + + @Override + public void dispose () { + + } + + public SpriteBatch getBatch() { + return batch; + } + + public OrthographicCamera getCam() { + return cam; + } + + public OrthographicCamera getHudCam() { + return hudCam; + } +} diff --git a/core/src/etat/GameState.java b/core/src/etat/GameState.java new file mode 100644 index 0000000..ea1af5b --- /dev/null +++ b/core/src/etat/GameState.java @@ -0,0 +1,30 @@ +package etat; + +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.mygdx.game.PlatVenture; + +import handlers.GameStateManager; + +public abstract class GameState { + protected GameStateManager gsm; + protected PlatVenture platVenture; + + protected SpriteBatch batch; + protected OrthographicCamera cam; + protected OrthographicCamera hudCam; + + protected GameState(GameStateManager gsm){ + this.gsm = gsm; + platVenture = gsm.getPlatVenture(); + batch = platVenture.getBatch(); + cam = platVenture.getCam(); + hudCam = platVenture.getHudCam(); + } + + public abstract void handleInput(); + public abstract void update(float dt); + public abstract void render(); + public abstract void dispose(); + +} diff --git a/core/src/etat/Play.java b/core/src/etat/Play.java new file mode 100644 index 0000000..66692cb --- /dev/null +++ b/core/src/etat/Play.java @@ -0,0 +1,85 @@ +package etat; + +import static handlers.B2DVars.PPM; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +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.Box2DDebugRenderer; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.PolygonShape; +import com.badlogic.gdx.physics.box2d.World; +import com.mygdx.game.PlatVenture; + +import handlers.GameStateManager; + +public class Play extends GameState { + + private World world; + private Box2DDebugRenderer b2dr; + + private OrthographicCamera b2dCam; + + public Play(GameStateManager gsm){ + super(gsm); + world = new World(new Vector2(0, -10f), true); + b2dr = new Box2DDebugRenderer(); + + BodyDef bdef = new BodyDef(); + bdef.position.set(80/PPM, 60/PPM); + bdef.type = BodyDef.BodyType.StaticBody; + Body body = world.createBody(bdef); + + PolygonShape shape = new PolygonShape(); + shape.setAsBox(50/PPM, 5/PPM); + + FixtureDef fdef = new FixtureDef(); + fdef.shape = shape; + body.createFixture(fdef); + + + bdef.position.set(80/PPM, 100/PPM); + bdef.type = BodyDef.BodyType.DynamicBody; + body = world.createBody(bdef); + + shape.setAsBox(5/PPM, 5/PPM); + + fdef = new FixtureDef(); + fdef.shape = shape; + body.createFixture(fdef); + + //Init b2dCam + b2dCam = new OrthographicCamera(); + b2dCam.setToOrtho(false, PlatVenture.largeur /PPM, PlatVenture.hauteur/PPM); + } + @Override + public void handleInput() { + + } + + @Override + public void update(float dt) { + //dt => delta time + + /*TODO remettre à 1 quand j'aurai bien compris, on a pas besoin d'autant de précisions + */ + world.step(dt, 6, 2); + } + + @Override + public void render() { + //Clear l'écran + Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT); + + //dessine le monde box2d + b2dr.render(world, b2dCam.combined); + } + + @Override + public void dispose() { + + } +} diff --git a/core/src/handlers/B2DVars.java b/core/src/handlers/B2DVars.java new file mode 100644 index 0000000..6a205a7 --- /dev/null +++ b/core/src/handlers/B2DVars.java @@ -0,0 +1,6 @@ +package handlers; + +public class B2DVars { + + public static final float PPM = 100; +} diff --git a/core/src/handlers/GameStateManager.java b/core/src/handlers/GameStateManager.java new file mode 100644 index 0000000..9f72771 --- /dev/null +++ b/core/src/handlers/GameStateManager.java @@ -0,0 +1,66 @@ +package handlers; + +import com.mygdx.game.PlatVenture; + +import java.util.Stack; + +import etat.GameState; +import etat.Play; + +public class GameStateManager { + + private PlatVenture platVenture; + private Stack<GameState> gameStates; + + public static final int PLAY = 4646; + + public GameStateManager(PlatVenture game){ + this.platVenture = game; + gameStates = new Stack<GameState>(); + pushState(PLAY); + } + + public PlatVenture getPlatVenture(){ + return platVenture; + } + + public void update(float dt){ + gameStates.peek().update(dt); + } + + public void render(){ + gameStates.peek().render(); + } + + private GameState getState(int state){ + if (state == PLAY){ + return new Play(this); + } + return null; + } + + /** + * Remplace ce qu'il y a en haut de la pile + * @param state + */ + public void setState(int state){ + popState(); + pushState(state); + } + + /** + * Met en haut de la pile un nouvel état correspondant à celui passé en paramètres + * @param state + */ + public void pushState(int state){ + gameStates.push(getState(state)); + } + + /** + * Retire ce qu'il y a en haut de la pile et le supprime + */ + public void popState(){ + GameState g = gameStates.pop(); + g.dispose(); + } +} diff --git a/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java new file mode 100644 index 0000000..e8b64fd --- /dev/null +++ b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java @@ -0,0 +1,15 @@ +package com.mygdx.game.desktop; + +import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; +import com.mygdx.game.PlatVenture; + +public class DesktopLauncher { + public static void main (String[] arg) { + LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); + config.title = PlatVenture.Titre; + config.width = PlatVenture.largeur * PlatVenture.scale; + config.height = PlatVenture.hauteur * PlatVenture.scale; + new LwjglApplication(new PlatVenture(), config); + } +} -- GitLab