diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/map/GameMap.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/GameMap.java index 772fa3d6..170ffb79 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/game/map/GameMap.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/GameMap.java @@ -7,6 +7,8 @@ import org.joml.Vector2f; public interface GameMap { Vector2f getSize(); + TileLayer getTileLayer(int layerIndex); + void addEntity(int objectLayerIndex, Entity entity); void removeEntity(int objectLayerIndex, Entity entity); @@ -15,11 +17,5 @@ public interface GameMap { void setPassageAbility(int objectLayerIndex, int row, int column, PassageAbility passageAbility); - void setTile(int tileLayerIndex, int row, int column, int tileId); - - void setTile(int tileLayerIndex, int row, int column, int tileSetRow, int tileSetColumn); - - void clearTile(int tileLayerIndex, int row, int column); - void setColor(int colorLayerIndex, float r, float g, float b, float alpha); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/base/Layer.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/Layer.java similarity index 75% rename from engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/base/Layer.java rename to api/src/main/java/com/bartlomiejpluta/base/api/game/map/Layer.java index 6f5c3c99..37f18560 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/base/Layer.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/Layer.java @@ -1,4 +1,4 @@ -package com.bartlomiejpluta.base.engine.world.map.layer.base; +package com.bartlomiejpluta.base.api.game.map; import com.bartlomiejpluta.base.api.internal.logic.Updatable; import com.bartlomiejpluta.base.api.internal.render.Renderable; diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/map/TileLayer.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/TileLayer.java new file mode 100644 index 00000000..1c1410f0 --- /dev/null +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/map/TileLayer.java @@ -0,0 +1,9 @@ +package com.bartlomiejpluta.base.api.game.map; + +public interface TileLayer extends Layer { + void setTile(int row, int column, int tileId); + + void setTile(int row, int column, int tileSetRow, int tileSetColumn); + + void clearTile(int row, int column); +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/ColorLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/ColorLayer.java index bfed5a8b..6122b536 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/ColorLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/ColorLayer.java @@ -1,11 +1,11 @@ package com.bartlomiejpluta.base.engine.world.map.layer.color; import com.bartlomiejpluta.base.api.game.camera.Camera; +import com.bartlomiejpluta.base.api.game.map.Layer; import com.bartlomiejpluta.base.api.game.window.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; -import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap; import com.bartlomiejpluta.base.engine.world.object.Sprite; import lombok.NonNull; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/ImageLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/ImageLayer.java index b4996eee..6ed7ea42 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/ImageLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/ImageLayer.java @@ -1,10 +1,10 @@ package com.bartlomiejpluta.base.engine.world.map.layer.image; import com.bartlomiejpluta.base.api.game.camera.Camera; +import com.bartlomiejpluta.base.api.game.map.Layer; import com.bartlomiejpluta.base.api.game.window.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager; import com.bartlomiejpluta.base.engine.world.image.model.Image; -import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap; import lombok.NonNull; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/ObjectLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/ObjectLayer.java index f5e9c66b..8c8a5479 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/ObjectLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/ObjectLayer.java @@ -3,10 +3,10 @@ package com.bartlomiejpluta.base.engine.world.map.layer.object; import com.bartlomiejpluta.base.api.game.camera.Camera; import com.bartlomiejpluta.base.api.game.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Entity; +import com.bartlomiejpluta.base.api.game.map.Layer; import com.bartlomiejpluta.base.api.game.map.PassageAbility; import com.bartlomiejpluta.base.api.game.window.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager; -import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import org.joml.Vector2i; import java.util.List; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/TileLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/DefaultTileLayer.java similarity index 50% rename from engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/TileLayer.java rename to engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/DefaultTileLayer.java index 8bb58cbf..edf13fca 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/TileLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/DefaultTileLayer.java @@ -1,31 +1,48 @@ package com.bartlomiejpluta.base.engine.world.map.layer.tile; import com.bartlomiejpluta.base.api.game.camera.Camera; +import com.bartlomiejpluta.base.api.game.map.TileLayer; import com.bartlomiejpluta.base.api.game.window.Window; import com.bartlomiejpluta.base.api.internal.render.ShaderManager; -import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.tileset.model.Tile; +import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet; +import lombok.NonNull; import java.util.Arrays; -public class TileLayer implements Layer { +public class DefaultTileLayer implements TileLayer { + private final TileSet tileSet; private final Tile[][] layer; - private final int rows; - private final int columns; - public TileLayer(int rows, int columns) { - this.rows = rows; - this.columns = columns; + public DefaultTileLayer(@NonNull TileSet tileSet, int rows, int columns) { + this.tileSet = tileSet; layer = new Tile[rows][columns]; Arrays.stream(layer).forEach(tiles -> Arrays.fill(tiles, null)); } - public void setTile(int row, int column, Tile tile) { + @Override + public void setTile(int row, int column, int tileId) { + var tile = tileSet.tileById(tileId); + tile.setCoordinates(row, column); layer[row][column] = tile; - if(tile != null) { - tile.setCoordinates(row, column); - } + } + + @Override + public void setTile(int row, int column, int tileSetRow, int tileSetColumn) { + var tile = tileSet.tileAt(tileSetRow, tileSetColumn); + tile.setCoordinates(row, column); + layer[row][column] = tile; + } + + @Override + public void clearTile(int row, int column) { + layer[row][column] = null; + } + + @Override + public void update(float dt) { + // Do nothing } @Override @@ -38,9 +55,4 @@ public class TileLayer implements Layer { } } } - - @Override - public void update(float dt) { - - } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/model/DefaultGameMap.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/model/DefaultGameMap.java index 366a76c9..92c9e6ac 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/model/DefaultGameMap.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/model/DefaultGameMap.java @@ -4,7 +4,9 @@ import com.bartlomiejpluta.base.api.game.camera.Camera; import com.bartlomiejpluta.base.api.game.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Movement; import com.bartlomiejpluta.base.api.game.map.GameMap; +import com.bartlomiejpluta.base.api.game.map.Layer; import com.bartlomiejpluta.base.api.game.map.PassageAbility; +import com.bartlomiejpluta.base.api.game.map.TileLayer; import com.bartlomiejpluta.base.api.game.window.Window; import com.bartlomiejpluta.base.api.internal.logic.Updatable; import com.bartlomiejpluta.base.api.internal.render.Renderable; @@ -12,12 +14,11 @@ import com.bartlomiejpluta.base.api.internal.render.ShaderManager; import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity; import com.bartlomiejpluta.base.engine.world.image.model.Image; -import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer; import com.bartlomiejpluta.base.engine.world.map.layer.color.ColorLayer; import com.bartlomiejpluta.base.engine.world.map.layer.image.ImageLayer; import com.bartlomiejpluta.base.engine.world.map.layer.image.ImageLayerMode; import com.bartlomiejpluta.base.engine.world.map.layer.object.ObjectLayer; -import com.bartlomiejpluta.base.engine.world.map.layer.tile.TileLayer; +import com.bartlomiejpluta.base.engine.world.map.layer.tile.DefaultTileLayer; import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet; import lombok.Getter; import lombok.NonNull; @@ -28,6 +29,7 @@ import java.util.Arrays; import java.util.List; public class DefaultGameMap implements Renderable, Updatable, GameMap { + @Getter private final List layers = new ArrayList<>(); @@ -81,6 +83,11 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap { return new Vector2f(columns * stepSize.x, rows * stepSize.y); } + @Override + public TileLayer getTileLayer(int layerIndex) { + return (TileLayer) layers.get(layerIndex); + } + public int createObjectLayer() { var passageMap = new PassageAbility[rows][columns]; for (int i = 0; i < rows; ++i) { @@ -92,10 +99,11 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap { return layers.size() - 1; } - public int createTileLayer() { - layers.add(new TileLayer(rows, columns)); + public TileLayer createTileLayer() { + var layer = new DefaultTileLayer(tileSet, rows, columns); + layers.add(layer); - return layers.size() - 1; + return layer; } public int createColorLayer(MeshManager meshManager, float r, float g, float b, float alpha) { @@ -123,21 +131,6 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap { ((ObjectLayer) layers.get(objectLayerIndex)).removeObject(entity); } - @Override - public void setTile(int tileLayerIndex, int row, int column, int tileId) { - ((TileLayer) layers.get(tileLayerIndex)).setTile(row, column, tileSet.tileById(tileId)); - } - - @Override - public void setTile(int tileLayerIndex, int row, int column, int tileSetRow, int tileSetColumn) { - ((TileLayer) layers.get(tileLayerIndex)).setTile(row, column, tileSet.tileAt(tileSetRow, tileSetColumn)); - } - - @Override - public void clearTile(int tileLayerIndex, int row, int column) { - ((TileLayer) layers.get(tileLayerIndex)).setTile(row, column, null); - } - @Override public void setPassageAbility(int objectLayerIndex, int row, int column, PassageAbility passageAbility) { ((ObjectLayer) layers.get(objectLayerIndex)).setPassageAbility(row, column, passageAbility); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/serial/ProtobufMapDeserializer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/serial/ProtobufMapDeserializer.java index c7072486..b3762ed6 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/serial/ProtobufMapDeserializer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/serial/ProtobufMapDeserializer.java @@ -57,9 +57,9 @@ public class ProtobufMapDeserializer extends MapDeserializer { var tile = tiles.get(i); if (tile == 0) { - map.clearTile(layer, i / columns, i % columns); + layer.clearTile(i / columns, i % columns); } else { - map.setTile(layer, i / columns, i % columns, tile - 1); + layer.setTile(i / columns, i % columns, tile - 1); } } }