diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/common/manager/AssetManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/common/manager/AssetManager.java new file mode 100644 index 00000000..343df2f6 --- /dev/null +++ b/game/src/main/java/com/bartlomiejpluta/base/game/common/manager/AssetManager.java @@ -0,0 +1,7 @@ +package com.bartlomiejpluta.base.game.common.manager; + +public interface AssetManager { + void registerAsset(A asset); + + T loadObject(String uid); +} diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/entity/asset/EntitySetAsset.java b/game/src/main/java/com/bartlomiejpluta/base/game/entity/asset/EntitySetAsset.java new file mode 100644 index 00000000..7179850f --- /dev/null +++ b/game/src/main/java/com/bartlomiejpluta/base/game/entity/asset/EntitySetAsset.java @@ -0,0 +1,17 @@ +package com.bartlomiejpluta.base.game.entity.asset; + +import com.bartlomiejpluta.base.game.common.asset.Asset; +import lombok.Getter; +import lombok.NonNull; + +@Getter +public class EntitySetAsset extends Asset { + private final int rows; + private final int columns; + + public EntitySetAsset(@NonNull String uid, @NonNull String source, int rows, int columns) { + super(uid, source); + this.rows = rows; + this.columns = columns; + } +} diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/entity/manager/DefaultEntitySetManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/entity/manager/DefaultEntitySetManager.java new file mode 100644 index 00000000..2daa5027 --- /dev/null +++ b/game/src/main/java/com/bartlomiejpluta/base/game/entity/manager/DefaultEntitySetManager.java @@ -0,0 +1,43 @@ +package com.bartlomiejpluta.base.game.entity.manager; + +import com.bartlomiejpluta.base.core.error.AppException; +import com.bartlomiejpluta.base.core.gl.object.material.Material; +import com.bartlomiejpluta.base.core.gl.object.texture.TextureManager; +import com.bartlomiejpluta.base.game.entity.asset.EntitySetAsset; +import com.bartlomiejpluta.base.game.project.config.ProjectConfiguration; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Component +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class DefaultEntitySetManager implements EntitySetManager { + private final TextureManager textureManager; + private final Map assets = new HashMap<>(); + private final ProjectConfiguration configuration; + + @Override + public void registerAsset(EntitySetAsset asset) { + log.info("Registering [{}] entity set asset under UID: [{}]", asset.getSource(), asset.getUid()); + assets.put(asset.getUid(), asset); + } + + @Override + public Material loadObject(String uid) { + var asset = assets.get(uid); + + if (asset == null) { + throw new AppException("The entity set asset with UID: [%s] does not exist", uid); + } + + var source = configuration.projectFile("entsets", asset.getSource()); + var texture = textureManager.loadTexture(source, asset.getRows(), asset.getColumns()); + + return Material.textured(texture); + } +} diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/entity/manager/EntitySetManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/entity/manager/EntitySetManager.java new file mode 100644 index 00000000..27c3c02e --- /dev/null +++ b/game/src/main/java/com/bartlomiejpluta/base/game/entity/manager/EntitySetManager.java @@ -0,0 +1,8 @@ +package com.bartlomiejpluta.base.game.entity.manager; + +import com.bartlomiejpluta.base.core.gl.object.material.Material; +import com.bartlomiejpluta.base.game.common.manager.AssetManager; +import com.bartlomiejpluta.base.game.entity.asset.EntitySetAsset; + +public interface EntitySetManager extends AssetManager { +} diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/DefaultImageManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/DefaultImageManager.java index fa2db09d..e1827d48 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/DefaultImageManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/DefaultImageManager.java @@ -33,7 +33,7 @@ public class DefaultImageManager implements ImageManager { } @Override - public Image loadImage(String uid) { + public Image loadObject(String uid) { var asset = assets.get(uid); if (asset == null) { diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/ImageManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/ImageManager.java index ecd44869..ea50c284 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/ImageManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/image/manager/ImageManager.java @@ -1,11 +1,9 @@ package com.bartlomiejpluta.base.game.image.manager; import com.bartlomiejpluta.base.core.gc.Cleanable; +import com.bartlomiejpluta.base.game.common.manager.AssetManager; import com.bartlomiejpluta.base.game.image.asset.ImageAsset; import com.bartlomiejpluta.base.game.image.model.Image; -public interface ImageManager extends Cleanable { - void registerAsset(ImageAsset asset); - - Image loadImage(String uid); +public interface ImageManager extends AssetManager, Cleanable { } diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/DefaultMapManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/DefaultMapManager.java index 5fbd46f1..43ce4a97 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/DefaultMapManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/DefaultMapManager.java @@ -29,7 +29,7 @@ public class DefaultMapManager implements MapManager { } @Override - public GameMap loadMap(String uid) { + public GameMap loadObject(String uid) { var map = maps.get(uid); if (map == null) { diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/MapManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/MapManager.java index 93ebe42b..8d4f753f 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/MapManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/map/manager/MapManager.java @@ -1,11 +1,9 @@ package com.bartlomiejpluta.base.game.map.manager; import com.bartlomiejpluta.base.core.gc.Cleanable; +import com.bartlomiejpluta.base.game.common.manager.AssetManager; import com.bartlomiejpluta.base.game.map.asset.GameMapAsset; import com.bartlomiejpluta.base.game.map.model.GameMap; -public interface MapManager extends Cleanable { - void registerAsset(GameMapAsset asset); - - GameMap loadMap(String uid); +public interface MapManager extends AssetManager, Cleanable { } diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/map/serial/ProtobufMapDeserializer.java b/game/src/main/java/com/bartlomiejpluta/base/game/map/serial/ProtobufMapDeserializer.java index 9f52991a..1aecca88 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/map/serial/ProtobufMapDeserializer.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/map/serial/ProtobufMapDeserializer.java @@ -26,7 +26,7 @@ public class ProtobufMapDeserializer extends MapDeserializer { @Override protected GameMap parse(InputStream input) throws Exception { var proto = GameMapProto.GameMap.parseFrom(input); - var tileSet = tileSetManager.loadTileSet(proto.getTileSetUID()); + var tileSet = tileSetManager.loadObject(proto.getTileSetUID()); var map = new GameMap(tileSet, proto.getRows(), proto.getColumns(), proto.getHandler()); proto.getLayersList().forEach(layer -> deserializeLayer(map, layer)); @@ -94,7 +94,7 @@ public class ProtobufMapDeserializer extends MapDeserializer { private void deserializeImageLayer(GameMap map, GameMapProto.Layer proto) { var protoImageLayer = proto.getImageLayer(); - var image = imageManager.loadImage(protoImageLayer.getImageUID()); + var image = imageManager.loadObject(protoImageLayer.getImageUID()); var mode = switch (proto.getImageLayer().getMode()) { case NORMAL -> ImageLayerMode.NORMAL; diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/project/loader/DefaultProjectLoader.java b/game/src/main/java/com/bartlomiejpluta/base/game/project/loader/DefaultProjectLoader.java index cd3dc0b9..bf588ac3 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/project/loader/DefaultProjectLoader.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/project/loader/DefaultProjectLoader.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.game.project.loader; +import com.bartlomiejpluta.base.game.entity.manager.EntitySetManager; import com.bartlomiejpluta.base.game.image.manager.ImageManager; import com.bartlomiejpluta.base.game.map.manager.MapManager; import com.bartlomiejpluta.base.game.project.config.ProjectConfiguration; @@ -18,6 +19,7 @@ public class DefaultProjectLoader implements ProjectLoader { private final TileSetManager tileSetManager; private final MapManager mapManager; private final ImageManager imageManager; + private final EntitySetManager entitySetManager; @Override public Project loadProject() { @@ -26,6 +28,7 @@ public class DefaultProjectLoader implements ProjectLoader { project.getTileSetAssets().forEach(tileSetManager::registerAsset); project.getMapAssets().forEach(mapManager::registerAsset); project.getImageAssets().forEach(imageManager::registerAsset); + project.getEntitySetAssets().forEach(entitySetManager::registerAsset); return project; } diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/project/model/Project.java b/game/src/main/java/com/bartlomiejpluta/base/game/project/model/Project.java index f0e93868..a00ed069 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/project/model/Project.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/project/model/Project.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.game.project.model; +import com.bartlomiejpluta.base.game.entity.asset.EntitySetAsset; import com.bartlomiejpluta.base.game.image.asset.ImageAsset; import com.bartlomiejpluta.base.game.map.asset.GameMapAsset; import com.bartlomiejpluta.base.game.tileset.asset.TileSetAsset; @@ -27,4 +28,7 @@ public class Project { @NonNull private final List imageAssets; + + @NonNull + private final List entitySetAssets; } diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/project/model/RenderableContext.java b/game/src/main/java/com/bartlomiejpluta/base/game/project/model/RenderableContext.java index fe009c0a..5744150b 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/project/model/RenderableContext.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/project/model/RenderableContext.java @@ -44,7 +44,7 @@ public class RenderableContext implements Context, Updatable, Renderable { @SneakyThrows @Override public void openMap(String mapUid) { - map = mapManager.loadMap(mapUid); + map = mapManager.loadObject(mapUid); var handlerClass = classLoader.loadClass(map.getHandler()); mapHandler = handlerClass.getConstructor().newInstance(); diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/project/serial/ProtobufProjectDeserializer.java b/game/src/main/java/com/bartlomiejpluta/base/game/project/serial/ProtobufProjectDeserializer.java index e4dd291d..ee431c8b 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/project/serial/ProtobufProjectDeserializer.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/project/serial/ProtobufProjectDeserializer.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.game.project.serial; +import com.bartlomiejpluta.base.game.entity.asset.EntitySetAsset; import com.bartlomiejpluta.base.game.image.asset.ImageAsset; import com.bartlomiejpluta.base.game.map.asset.GameMapAsset; import com.bartlomiejpluta.base.game.project.model.Project; @@ -22,7 +23,9 @@ public class ProtobufProjectDeserializer extends ProjectDeserializer { var tileSetAssets = proto.getTileSetsList().stream().map(this::parseTileSetAsset).collect(toList()); var mapAssets = proto.getMapsList().stream().map(this::parseGameMapAsset).collect(toList()); var imageAssets = proto.getImagesList().stream().map(this::parseImageAsset).collect(toList()); - return new Project(name, runner, tileSetAssets, mapAssets, imageAssets); + var entitySetAssets = proto.getEntitySetsList().stream().map(this::parseEntitySetAsset).collect(toList()); + + return new Project(name, runner, tileSetAssets, mapAssets, imageAssets, entitySetAssets); } private TileSetAsset parseTileSetAsset(ProjectProto.TileSetAsset proto) { @@ -36,4 +39,8 @@ public class ProtobufProjectDeserializer extends ProjectDeserializer { private ImageAsset parseImageAsset(ProjectProto.ImageAsset proto) { return new ImageAsset(proto.getUid(), proto.getSource()); } + + private EntitySetAsset parseEntitySetAsset(ProjectProto.EntitySetAsset proto) { + return new EntitySetAsset(proto.getUid(), proto.getSource(), proto.getRows(), proto.getColumns()); + } } diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/DefaultTileSetManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/DefaultTileSetManager.java index 2bd5748e..18ab8cd9 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/DefaultTileSetManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/DefaultTileSetManager.java @@ -26,12 +26,12 @@ public class DefaultTileSetManager implements TileSetManager { @Override public void registerAsset(TileSetAsset asset) { - log.info("Registering [{}] tileset asset under UID: [{}]", asset.getSource(), asset.getUid()); + log.info("Registering [{}] tile set asset under UID: [{}]", asset.getSource(), asset.getUid()); assets.put(asset.getUid(), asset); } @Override - public TileSet loadTileSet(String uid) { + public TileSet loadObject(String uid) { var tileset = tileSets.get(uid); if (tileset == null) { diff --git a/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/TileSetManager.java b/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/TileSetManager.java index 4eb0111e..8851bbe9 100644 --- a/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/TileSetManager.java +++ b/game/src/main/java/com/bartlomiejpluta/base/game/tileset/manager/TileSetManager.java @@ -1,11 +1,9 @@ package com.bartlomiejpluta.base.game.tileset.manager; import com.bartlomiejpluta.base.core.gc.Cleanable; +import com.bartlomiejpluta.base.game.common.manager.AssetManager; import com.bartlomiejpluta.base.game.tileset.asset.TileSetAsset; import com.bartlomiejpluta.base.game.tileset.model.TileSet; -public interface TileSetManager extends Cleanable { - void registerAsset(TileSetAsset asset); - - TileSet loadTileSet(String uid); +public interface TileSetManager extends AssetManager, Cleanable { }