Extract TileLayer interface to :api
This commit is contained in:
@@ -7,6 +7,8 @@ import org.joml.Vector2f;
|
|||||||
public interface GameMap {
|
public interface GameMap {
|
||||||
Vector2f getSize();
|
Vector2f getSize();
|
||||||
|
|
||||||
|
TileLayer getTileLayer(int layerIndex);
|
||||||
|
|
||||||
void addEntity(int objectLayerIndex, Entity entity);
|
void addEntity(int objectLayerIndex, Entity entity);
|
||||||
|
|
||||||
void removeEntity(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 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);
|
void setColor(int colorLayerIndex, float r, float g, float b, float alpha);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.logic.Updatable;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.Renderable;
|
import com.bartlomiejpluta.base.api.internal.render.Renderable;
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.map.layer.color;
|
package com.bartlomiejpluta.base.engine.world.map.layer.color;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
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.game.window.Window;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
||||||
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
|
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
|
||||||
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
|
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.map.model.DefaultGameMap;
|
||||||
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.map.layer.image;
|
package com.bartlomiejpluta.base.engine.world.map.layer.image;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
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.game.window.Window;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.image.model.Image;
|
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 com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
|
|||||||
@@ -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.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.api.game.entity.Direction;
|
import com.bartlomiejpluta.base.api.game.entity.Direction;
|
||||||
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
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.map.PassageAbility;
|
||||||
import com.bartlomiejpluta.base.api.game.window.Window;
|
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.base.Layer;
|
|
||||||
import org.joml.Vector2i;
|
import org.joml.Vector2i;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -1,31 +1,48 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.map.layer.tile;
|
package com.bartlomiejpluta.base.engine.world.map.layer.tile;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
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.game.window.Window;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
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.Tile;
|
||||||
|
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
||||||
|
import lombok.NonNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class TileLayer implements Layer {
|
public class DefaultTileLayer implements TileLayer {
|
||||||
|
private final TileSet tileSet;
|
||||||
private final Tile[][] layer;
|
private final Tile[][] layer;
|
||||||
private final int rows;
|
|
||||||
private final int columns;
|
|
||||||
|
|
||||||
public TileLayer(int rows, int columns) {
|
public DefaultTileLayer(@NonNull TileSet tileSet, int rows, int columns) {
|
||||||
this.rows = rows;
|
this.tileSet = tileSet;
|
||||||
this.columns = columns;
|
|
||||||
layer = new Tile[rows][columns];
|
layer = new Tile[rows][columns];
|
||||||
Arrays.stream(layer).forEach(tiles -> Arrays.fill(tiles, null));
|
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;
|
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
|
@Override
|
||||||
@@ -38,9 +55,4 @@ public class TileLayer implements Layer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update(float dt) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -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.Entity;
|
||||||
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
||||||
import com.bartlomiejpluta.base.api.game.map.GameMap;
|
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.PassageAbility;
|
||||||
|
import com.bartlomiejpluta.base.api.game.map.TileLayer;
|
||||||
import com.bartlomiejpluta.base.api.game.window.Window;
|
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||||
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
|
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
|
||||||
import com.bartlomiejpluta.base.api.internal.render.Renderable;
|
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.util.mesh.MeshManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity;
|
import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity;
|
||||||
import com.bartlomiejpluta.base.engine.world.image.model.Image;
|
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.color.ColorLayer;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.image.ImageLayer;
|
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.image.ImageLayerMode;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.object.ObjectLayer;
|
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 com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
@@ -28,6 +29,7 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final List<Layer> layers = new ArrayList<>();
|
private final List<Layer> layers = new ArrayList<>();
|
||||||
|
|
||||||
@@ -81,6 +83,11 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
|||||||
return new Vector2f(columns * stepSize.x, rows * stepSize.y);
|
return new Vector2f(columns * stepSize.x, rows * stepSize.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileLayer getTileLayer(int layerIndex) {
|
||||||
|
return (TileLayer) layers.get(layerIndex);
|
||||||
|
}
|
||||||
|
|
||||||
public int createObjectLayer() {
|
public int createObjectLayer() {
|
||||||
var passageMap = new PassageAbility[rows][columns];
|
var passageMap = new PassageAbility[rows][columns];
|
||||||
for (int i = 0; i < rows; ++i) {
|
for (int i = 0; i < rows; ++i) {
|
||||||
@@ -92,10 +99,11 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
|||||||
return layers.size() - 1;
|
return layers.size() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int createTileLayer() {
|
public TileLayer createTileLayer() {
|
||||||
layers.add(new TileLayer(rows, columns));
|
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) {
|
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);
|
((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
|
@Override
|
||||||
public void setPassageAbility(int objectLayerIndex, int row, int column, PassageAbility passageAbility) {
|
public void setPassageAbility(int objectLayerIndex, int row, int column, PassageAbility passageAbility) {
|
||||||
((ObjectLayer) layers.get(objectLayerIndex)).setPassageAbility(row, column, passageAbility);
|
((ObjectLayer) layers.get(objectLayerIndex)).setPassageAbility(row, column, passageAbility);
|
||||||
|
|||||||
@@ -57,9 +57,9 @@ public class ProtobufMapDeserializer extends MapDeserializer {
|
|||||||
var tile = tiles.get(i);
|
var tile = tiles.get(i);
|
||||||
|
|
||||||
if (tile == 0) {
|
if (tile == 0) {
|
||||||
map.clearTile(layer, i / columns, i % columns);
|
layer.clearTile(i / columns, i % columns);
|
||||||
} else {
|
} else {
|
||||||
map.setTile(layer, i / columns, i % columns, tile - 1);
|
layer.setTile(i / columns, i % columns, tile - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user