diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/asset/FontAsset.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/asset/FontAsset.java new file mode 100644 index 00000000..6663b4c0 --- /dev/null +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/asset/FontAsset.java @@ -0,0 +1,11 @@ +package com.bartlomiejpluta.base.engine.gui.font.asset; + +import com.bartlomiejpluta.base.engine.common.asset.Asset; +import lombok.NonNull; + +public class FontAsset extends Asset { + + public FontAsset(@NonNull String uid, @NonNull String source) { + super(uid, source); + } +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/manager/DefaultFontManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/manager/DefaultFontManager.java new file mode 100644 index 00000000..111065fd --- /dev/null +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/manager/DefaultFontManager.java @@ -0,0 +1,29 @@ +package com.bartlomiejpluta.base.engine.gui.font.manager; + +import com.bartlomiejpluta.base.engine.gui.font.asset.FontAsset; +import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Component +public class DefaultFontManager implements FontManager { + private final Map assets = new HashMap<>(); + + @Override + public void registerAsset(FontAsset asset) { + log.info("Registering [{}] font asset under UID: [{}]", asset.getSource(), asset.getUid()); + } + + @Override + public Integer loadObject(String uid) { + // TODO(Implement some kind of font object) + // The method should return useful resource associated with the font + // that can be easily consumed by NanoVG. + // Likely it will be just integer with a unique font ID. + return null; + } +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/manager/FontManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/manager/FontManager.java new file mode 100644 index 00000000..daf08e31 --- /dev/null +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/font/manager/FontManager.java @@ -0,0 +1,7 @@ +package com.bartlomiejpluta.base.engine.gui.font.manager; + +import com.bartlomiejpluta.base.engine.common.manager.AssetManager; +import com.bartlomiejpluta.base.engine.gui.font.asset.FontAsset; + +public interface FontManager extends AssetManager { +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/project/loader/DefaultProjectLoader.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/project/loader/DefaultProjectLoader.java index 000aa0b4..a4bb4f20 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/project/loader/DefaultProjectLoader.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/project/loader/DefaultProjectLoader.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.engine.project.loader; +import com.bartlomiejpluta.base.engine.gui.font.manager.FontManager; import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration; import com.bartlomiejpluta.base.engine.project.model.Project; import com.bartlomiejpluta.base.engine.project.serial.ProjectDeserializer; @@ -20,6 +21,7 @@ public class DefaultProjectLoader implements ProjectLoader { private final MapManager mapManager; private final ImageManager imageManager; private final EntitySetManager entitySetManager; + private final FontManager fontManager; @Override public Project loadProject() { @@ -29,6 +31,7 @@ public class DefaultProjectLoader implements ProjectLoader { project.getMapAssets().forEach(mapManager::registerAsset); project.getImageAssets().forEach(imageManager::registerAsset); project.getEntitySetAssets().forEach(entitySetManager::registerAsset); + project.getFontAssets().forEach(fontManager::registerAsset); return project; } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/project/model/Project.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/project/model/Project.java index e35fae1f..d1b6144a 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/project/model/Project.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/project/model/Project.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.engine.project.model; +import com.bartlomiejpluta.base.engine.gui.font.asset.FontAsset; import com.bartlomiejpluta.base.engine.world.entity.asset.EntitySetAsset; import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset; import com.bartlomiejpluta.base.engine.world.map.asset.GameMapAsset; @@ -31,4 +32,7 @@ public class Project { @NonNull private final List entitySetAssets; + + @NonNull + private final List fontAssets; } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/project/serial/ProtobufProjectDeserializer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/project/serial/ProtobufProjectDeserializer.java index 92ed7b5b..e139e163 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/project/serial/ProtobufProjectDeserializer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/project/serial/ProtobufProjectDeserializer.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.engine.project.serial; +import com.bartlomiejpluta.base.engine.gui.font.asset.FontAsset; import com.bartlomiejpluta.base.engine.project.model.Project; import com.bartlomiejpluta.base.engine.world.entity.asset.EntitySetAsset; import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset; @@ -24,8 +25,9 @@ public class ProtobufProjectDeserializer extends ProjectDeserializer { var mapAssets = proto.getMapsList().stream().map(this::parseGameMapAsset).collect(toList()); var imageAssets = proto.getImagesList().stream().map(this::parseImageAsset).collect(toList()); var entitySetAssets = proto.getEntitySetsList().stream().map(this::parseEntitySetAsset).collect(toList()); + var fontAssets = proto.getFontsList().stream().map(this::parseFontAsset).collect(toList()); - return new Project(name, runner, tileSetAssets, mapAssets, imageAssets, entitySetAssets); + return new Project(name, runner, tileSetAssets, mapAssets, imageAssets, entitySetAssets, fontAssets); } private TileSetAsset parseTileSetAsset(ProjectProto.TileSetAsset proto) { @@ -43,4 +45,8 @@ public class ProtobufProjectDeserializer extends ProjectDeserializer { private EntitySetAsset parseEntitySetAsset(ProjectProto.EntitySetAsset proto) { return new EntitySetAsset(proto.getUid(), proto.getSource(), proto.getRows(), proto.getColumns()); } + + private FontAsset parseFontAsset(ProjectProto.FontAsset proto) { + return new FontAsset(proto.getUid(), proto.getSource()); + } }