From 363cd0e67926a35df2cb47bab472f107acf28054 Mon Sep 17 00:00:00 2001 From: Quillraven Date: Sun, 25 May 2025 15:06:21 +0200 Subject: [PATCH] minor box2d addition --- .../com/quillraven/component/Physic.java | 13 ++++++++++ .../com/quillraven/screen/GameScreen.java | 8 +++++- .../quillraven/tiled/TiledAshleySpawner.java | 26 ++++++++++++++++++- .../com/quillraven/tiled/TiledPhysics.java | 6 +++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/io/github/com/quillraven/component/Physic.java create mode 100644 core/src/main/java/io/github/com/quillraven/tiled/TiledPhysics.java diff --git a/core/src/main/java/io/github/com/quillraven/component/Physic.java b/core/src/main/java/io/github/com/quillraven/component/Physic.java new file mode 100644 index 0000000..8e79d98 --- /dev/null +++ b/core/src/main/java/io/github/com/quillraven/component/Physic.java @@ -0,0 +1,13 @@ +package io.github.com.quillraven.component; + +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.ComponentMapper; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; + +public record Physic( + Body body, + Vector2 prevPosition +) implements Component { + public static final ComponentMapper MAPPER = ComponentMapper.getFor(Physic.class); +} diff --git a/core/src/main/java/io/github/com/quillraven/screen/GameScreen.java b/core/src/main/java/io/github/com/quillraven/screen/GameScreen.java index 2026972..b0ff73c 100644 --- a/core/src/main/java/io/github/com/quillraven/screen/GameScreen.java +++ b/core/src/main/java/io/github/com/quillraven/screen/GameScreen.java @@ -4,6 +4,8 @@ import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.EntitySystem; import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.maps.tiled.TiledMap; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.utils.Disposable; import io.github.com.quillraven.GdxGame; import io.github.com.quillraven.asset.MapAsset; @@ -18,11 +20,14 @@ public class GameScreen extends ScreenAdapter { private final TiledService tiledService; private final Engine engine; private final TiledAshleySpawner tiledAshleySpawner; + private final World physicWorld; public GameScreen(GdxGame game) { this.tiledService = new TiledService(game.getAssetService()); + this.physicWorld = new World(Vector2.Zero, true); + this.physicWorld.setAutoClearForces(false); this.engine = new Engine(); - this.tiledAshleySpawner = new TiledAshleySpawner(this.engine); + this.tiledAshleySpawner = new TiledAshleySpawner(this.engine, this.physicWorld); // add ECS systems this.engine.addSystem(new RenderSystem(game.getBatch(), game.getViewport(), game.getCamera())); @@ -53,5 +58,6 @@ public class GameScreen extends ScreenAdapter { disposable.dispose(); } } + this.physicWorld.dispose(); } } diff --git a/core/src/main/java/io/github/com/quillraven/tiled/TiledAshleySpawner.java b/core/src/main/java/io/github/com/quillraven/tiled/TiledAshleySpawner.java index a955cdc..0c4f1a2 100644 --- a/core/src/main/java/io/github/com/quillraven/tiled/TiledAshleySpawner.java +++ b/core/src/main/java/io/github/com/quillraven/tiled/TiledAshleySpawner.java @@ -6,20 +6,27 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.maps.MapLayer; import com.badlogic.gdx.maps.MapObject; +import com.badlogic.gdx.maps.MapObjects; import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.maps.tiled.TiledMapTileLayer; import com.badlogic.gdx.maps.tiled.objects.TiledMapTileMapObject; 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.World; import com.badlogic.gdx.utils.GdxRuntimeException; import io.github.com.quillraven.GdxGame; import io.github.com.quillraven.component.Graphic; +import io.github.com.quillraven.component.Physic; import io.github.com.quillraven.component.Transform; public class TiledAshleySpawner { private final Engine engine; + private final World physicWorld; - public TiledAshleySpawner(Engine engine) { + public TiledAshleySpawner(Engine engine, World physicWorld) { this.engine = engine; + this.physicWorld = physicWorld; } public void loadMapObjects(TiledMap tiledMap) { @@ -49,11 +56,28 @@ public class TiledAshleySpawner { Entity entity = this.engine.createEntity(); addEntityTransform(tileMapObject, entity); + addEntityPhysic(tileMapObject.getTile().getObjects(), entity); entity.add(new Graphic(tileMapObject.getTile().getTextureRegion(), Color.WHITE.cpy())); this.engine.addEntity(entity); } + private void addEntityPhysic(MapObjects objects, Entity entity) { + if (objects.getCount() == 0) return; + + BodyDef bodyDef = new BodyDef(); + bodyDef.type = BodyDef.BodyType.DynamicBody; + bodyDef.position.set(entity.getComponent(Transform.class).position()); + bodyDef.fixedRotation = true; + + Body body = this.physicWorld.createBody(bodyDef); + for (MapObject object : objects) { + + } + + entity.add(new Physic(body, new Vector2(body.getPosition()))); + } + private static void addEntityTransform(TiledMapTileMapObject tileMapObject, Entity entity) { Vector2 position = new Vector2(tileMapObject.getX(), tileMapObject.getY()); TextureRegion textureRegion = tileMapObject.getTile().getTextureRegion(); diff --git a/core/src/main/java/io/github/com/quillraven/tiled/TiledPhysics.java b/core/src/main/java/io/github/com/quillraven/tiled/TiledPhysics.java new file mode 100644 index 0000000..c1e65d8 --- /dev/null +++ b/core/src/main/java/io/github/com/quillraven/tiled/TiledPhysics.java @@ -0,0 +1,6 @@ +package io.github.com.quillraven.tiled; + +import com.badlogic.gdx.physics.box2d.World; + +public final class TiledPhysics { +}