diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/DefaultMeshManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/DefaultMeshManager.java new file mode 100644 index 00000000..7ef68cf5 --- /dev/null +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/DefaultMeshManager.java @@ -0,0 +1,38 @@ +package com.bartlomiejpluta.base.engine.core.gl.object.mesh; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.LinkedList; +import java.util.List; + +@Slf4j +@Component +public class DefaultMeshManager implements MeshManager { + private final List meshes = new LinkedList<>(); + + @Override + public Mesh createMesh(int maxQuads) { + log.debug("Creating [maxQuads: {}] mesh", maxQuads); + var mesh = new Mesh(maxQuads); + + meshes.add(mesh); + return mesh; + } + + @Override + public QuadMesh createQuad(float width, float height, float originX, float originY) { + log.debug("Creating [w:{}, h:{} | O:{}, {}] mesh", width, height, originX, originY); + var quad = new QuadMesh(width, height, originX, originY); + + meshes.add(quad); + return quad; + } + + @Override + public void cleanUp() { + log.info("Disposing meshes"); + meshes.forEach(Mesh::dispose); + log.info("Disposed {} meshes", meshes.size()); + } +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java index 2e647c6b..3fccd20c 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java @@ -53,7 +53,7 @@ public class Mesh implements Renderable, Disposable { @Getter private int currentQuadCount = 0; - public Mesh(int maxQuads) { + Mesh(int maxQuads) { this.maxQuads = maxQuads; this.maxVertices = maxQuads * VERTICES_PER_QUAD * 2; this.maxIndices = maxQuads * INDICES_PER_QUAD; @@ -302,8 +302,4 @@ public class Mesh implements Renderable, Disposable { public boolean isEmpty() { return currentQuadCount == 0; } - - public static QuadMesh quad(float width, float height, float originX, float originY) { - return new QuadMesh(width, height, originX, originY); - } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/MeshManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/MeshManager.java new file mode 100644 index 00000000..2d25cb0d --- /dev/null +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/MeshManager.java @@ -0,0 +1,9 @@ +package com.bartlomiejpluta.base.engine.core.gl.object.mesh; + +import com.bartlomiejpluta.base.internal.gc.Cleanable; + +public interface MeshManager extends Cleanable { + Mesh createMesh(int maxQuads); + + QuadMesh createQuad(float width, float height, float originX, float originY); +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/QuadMesh.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/QuadMesh.java index 7578b5f3..32c18509 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/QuadMesh.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/QuadMesh.java @@ -1,10 +1,23 @@ package com.bartlomiejpluta.base.engine.core.gl.object.mesh; +import lombok.Getter; import lombok.NonNull; public class QuadMesh extends Mesh { private final int quadId; + @Getter + private final float width; + + @Getter + private final float height; + + @Getter + private final float originX; + + @Getter + private final float originY; + QuadMesh(float width, float height, float originX, float originY) { this(new QuadTemplate(width, height, originX, originY)); } @@ -12,6 +25,11 @@ public class QuadMesh extends Mesh { QuadMesh(@NonNull QuadTemplate template) { super(1); + this.width = template.getWidth(); + this.height = template.getHeight(); + this.originX = template.getOriginX(); + this.originY = template.getOriginY(); + this.quadId = addQuad(template, 0, 0); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/util/mesh/DefaultMeshManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/util/mesh/DefaultMeshManager.java deleted file mode 100644 index 83d58024..00000000 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/util/mesh/DefaultMeshManager.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.bartlomiejpluta.base.engine.util.mesh; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -// TODO -@Slf4j -@Component -public class DefaultMeshManager implements MeshManager { - @Override - public void cleanUp() { - log.info("Nothing to do for now (todo...)"); - } - -} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/util/mesh/MeshManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/util/mesh/MeshManager.java deleted file mode 100644 index 5f23f1ea..00000000 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/util/mesh/MeshManager.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.bartlomiejpluta.base.engine.util.mesh; - -import com.bartlomiejpluta.base.internal.gc.Cleanable; - -public interface MeshManager extends Cleanable { -} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java index b8a641ea..639a8f3c 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java @@ -5,5 +5,5 @@ import com.bartlomiejpluta.base.engine.common.init.Initializable; import com.bartlomiejpluta.base.engine.common.manager.AssetManager; import com.bartlomiejpluta.base.engine.world.animation.asset.AnimationAsset; -public interface AnimationManager extends Initializable, AssetManager { +public interface AnimationManager extends AssetManager { } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java index 64dad93a..758578e1 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java @@ -1,11 +1,11 @@ package com.bartlomiejpluta.base.engine.world.animation.manager; import com.bartlomiejpluta.base.api.animation.Animation; -import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.animation.asset.AnimationAsset; import com.bartlomiejpluta.base.engine.world.animation.model.DefaultAnimation; import lombok.RequiredArgsConstructor; @@ -22,17 +22,17 @@ import java.util.Map; @Component @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DefaultAnimationManager implements AnimationManager { + private static final float QUAD_WIDTH = 1; + private static final float QUAD_HEIGHT = 1; + private static final float QUAD_ORIGIN_X = .5f; + private static final float QUAD_ORIGIN_Y = .5f; + private final MeshManager meshManager; private final TextureManager textureManager; private final Map assets = new HashMap<>(); private final Map frames = new HashMap<>(); private final ProjectConfiguration configuration; - @Override - public void init() { - // TODO mesh = meshManager.createQuad(1, 1, 0.5f, 0.5f); - } - @Override public void registerAsset(AnimationAsset asset) { log.info("Registering [{}] animation asset under UID: [{}]", asset.getSource(), asset.getUid()); @@ -59,7 +59,7 @@ public class DefaultAnimationManager implements AnimationManager { var source = configuration.projectFile("animations", asset.getSource()); var texture = textureManager.loadTexture(source, asset.getRows(), asset.getColumns()); - return new DefaultAnimation(texture, animationFrames); + return new DefaultAnimation(meshManager.createQuad(QUAD_WIDTH, QUAD_HEIGHT, QUAD_ORIGIN_X, QUAD_ORIGIN_Y), texture, animationFrames); } private Vector2fc[] createFrames(int rows, int columns) { diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/AnimatedSprite.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/AnimatedSprite.java index 4f2dea93..236b7658 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/AnimatedSprite.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/AnimatedSprite.java @@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.engine.world.animation.model; import com.bartlomiejpluta.base.api.animation.Animated; import com.bartlomiejpluta.base.engine.core.engine.DefaultGameEngine; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.world.object.Sprite; import com.bartlomiejpluta.base.util.math.MathUtil; import lombok.EqualsAndHashCode; @@ -15,8 +16,8 @@ public abstract class AnimatedSprite extends Sprite implements Animated { private int intervalInMilliseconds = 100; protected int currentAnimationFrame; - public AnimatedSprite(Material material) { - super(material); + public AnimatedSprite(QuadMesh mesh, Material material) { + super(mesh, material); } protected abstract boolean shouldAnimate(); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java index 6fcf7ffc..2b27089d 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java @@ -6,6 +6,7 @@ import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.move.AnimationMovement; import com.bartlomiejpluta.base.api.move.Direction; import com.bartlomiejpluta.base.api.move.Movement; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.engine.world.movement.MovableSprite; import com.bartlomiejpluta.base.util.path.Path; @@ -50,8 +51,8 @@ public class DefaultAnimation extends MovableSprite implements Animation { @Getter private final CompletableFuture future = new CompletableFuture<>(); - public DefaultAnimation(Texture texture, @NonNull Vector2fc[] frames) { - super(texture); + public DefaultAnimation(QuadMesh mesh, Texture texture, @NonNull Vector2fc[] frames) { + super(mesh, texture); this.frames = frames; this.lastFrameIndex = frames.length - 1; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/AutoTileManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/AutoTileManager.java index af8675d6..4c0750d5 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/AutoTileManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/AutoTileManager.java @@ -1,9 +1,8 @@ package com.bartlomiejpluta.base.engine.world.autotile.manager; -import com.bartlomiejpluta.base.engine.common.init.Initializable; import com.bartlomiejpluta.base.engine.common.manager.AssetManager; import com.bartlomiejpluta.base.engine.world.autotile.asset.AutoTileSetAsset; import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet; -public interface AutoTileManager extends Initializable, AssetManager { +public interface AutoTileManager extends AssetManager { } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/DefaultAutoTileSetManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/DefaultAutoTileSetManager.java index 68fabce2..ada3c7dd 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/DefaultAutoTileSetManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/autotile/manager/DefaultAutoTileSetManager.java @@ -23,10 +23,6 @@ public class DefaultAutoTileSetManager implements AutoTileManager { private final Map assets = new HashMap<>(); private final ProjectConfiguration configuration; - @Override - public void init() { - } - @Override public void registerAsset(AutoTileSetAsset asset) { log.info("Registering [{}] auto tile set asset under UID: [{}]", asset.getSource(), asset.getUid()); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/CharacterManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/CharacterManager.java index 93c101ef..5b5684a3 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/CharacterManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/CharacterManager.java @@ -4,6 +4,6 @@ import com.bartlomiejpluta.base.api.character.Character; import com.bartlomiejpluta.base.engine.common.init.Initializable; import com.bartlomiejpluta.base.internal.gc.Cleanable; -public interface CharacterManager extends Initializable, Cleanable { +public interface CharacterManager extends Cleanable { Character createCharacter(String characterSetUid); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/DefaultCharacterManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/DefaultCharacterManager.java index 313aed2e..a0fc0e69 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/DefaultCharacterManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/manager/DefaultCharacterManager.java @@ -1,7 +1,8 @@ package com.bartlomiejpluta.base.engine.world.character.manager; import com.bartlomiejpluta.base.api.character.Character; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.character.config.CharacterSpriteConfiguration; import com.bartlomiejpluta.base.engine.world.character.model.DefaultCharacter; import lombok.RequiredArgsConstructor; @@ -13,18 +14,18 @@ import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor(onConstructor_ = @__(@Autowired)) public class DefaultCharacterManager implements CharacterManager { + private static final float QUAD_WIDTH = 1; + private static final float QUAD_HEIGHT = 1; + private static final float QUAD_ORIGIN_X = .5f; + private static final float QUAD_ORIGIN_Y = 1; + private final MeshManager meshManager; private final CharacterSetManager characterSetManager; private final CharacterSpriteConfiguration configuration; - @Override - public void init() { -// TODO mesh = meshManager.createQuad(1, 1, 0.5f, 1); - } - @Override public Character createCharacter(String characterSetUid) { - return new DefaultCharacter(characterSetManager, characterSetUid, configuration.getDefaultSpriteColumn()); + return new DefaultCharacter(characterSetManager, meshManager.createQuad(QUAD_WIDTH, QUAD_HEIGHT, QUAD_ORIGIN_X, QUAD_ORIGIN_Y), characterSetUid, configuration.getDefaultSpriteColumn()); } @Override diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java index d43a21a3..e6aba496 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java @@ -7,6 +7,7 @@ import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.move.CharacterMovement; import com.bartlomiejpluta.base.api.move.Direction; import com.bartlomiejpluta.base.api.move.Movement; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.world.character.manager.CharacterSetManager; import com.bartlomiejpluta.base.engine.world.movement.MovableSprite; @@ -53,12 +54,12 @@ public class DefaultCharacter extends MovableSprite implements Character { private boolean animationEnabled = true; - public DefaultCharacter(CharacterSetManager characterSetManager, @NonNull String characterSetUid, int defaultSpriteColumn) { - this(characterSetManager.loadObject(characterSetUid), characterSetManager, defaultSpriteColumn); + public DefaultCharacter(CharacterSetManager characterSetManager, QuadMesh mesh, @NonNull String characterSetUid, int defaultSpriteColumn) { + this(mesh, characterSetManager.loadObject(characterSetUid), characterSetManager, defaultSpriteColumn); } - private DefaultCharacter(@NonNull CharacterSet characterSet, @NonNull CharacterSetManager characterSetManager, int defaultSpriteColumn) { - super(characterSet.getTexture()); + private DefaultCharacter(QuadMesh mesh, @NonNull CharacterSet characterSet, @NonNull CharacterSetManager characterSetManager, int defaultSpriteColumn) { + super(mesh, characterSet.getTexture()); this.defaultSpriteColumn = defaultSpriteColumn; this.characterSetManager = characterSetManager; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/DefaultIconManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/DefaultIconManager.java index acf7639e..eefc11f7 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/DefaultIconManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/DefaultIconManager.java @@ -1,7 +1,8 @@ package com.bartlomiejpluta.base.engine.world.icon.manager; import com.bartlomiejpluta.base.api.icon.Icon; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.icon.model.DefaultIcon; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -12,17 +13,17 @@ import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DefaultIconManager implements IconManager { + private static final float QUAD_WIDTH = 1; + private static final float QUAD_HEIGHT = 1; + private static final float QUAD_ORIGIN_X = .5f; + private static final float QUAD_ORIGIN_Y = 1; + private final MeshManager meshManager; private final IconSetManager iconSetManager; - @Override - public void init() { -// TODO: this.mesh = meshManager.createQuad(1, 1, 0.5f, 1); - } - @Override public Icon createIcon(String iconSetUid, int row, int column) { - return new DefaultIcon(iconSetManager, iconSetUid, row, column); + return new DefaultIcon(iconSetManager, meshManager.createQuad(QUAD_WIDTH, QUAD_HEIGHT, QUAD_ORIGIN_X, QUAD_ORIGIN_Y), iconSetUid, row, column); } @Override diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/IconManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/IconManager.java index 39e88141..d1a32ffb 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/IconManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/manager/IconManager.java @@ -4,6 +4,6 @@ import com.bartlomiejpluta.base.api.icon.Icon; import com.bartlomiejpluta.base.engine.common.init.Initializable; import com.bartlomiejpluta.base.internal.gc.Cleanable; -public interface IconManager extends Initializable, Cleanable { +public interface IconManager extends Cleanable { Icon createIcon(String iconSetUid, int row, int column); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/model/DefaultIcon.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/model/DefaultIcon.java index bc8a96d0..947ef80c 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/model/DefaultIcon.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/icon/model/DefaultIcon.java @@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.event.Event; import com.bartlomiejpluta.base.api.event.EventType; import com.bartlomiejpluta.base.api.icon.Icon; import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.world.icon.manager.IconSetManager; @@ -43,12 +44,12 @@ public class DefaultIcon extends Sprite implements Icon { @Getter private int zIndex; - public DefaultIcon(IconSetManager iconSetManager, String iconSetUid, int row, int column) { - this(iconSetManager, iconSetManager.loadObject(iconSetUid), iconSetUid, row, column); + public DefaultIcon(IconSetManager iconSetManager, QuadMesh mesh, String iconSetUid, int row, int column) { + this(iconSetManager, mesh, iconSetManager.loadObject(iconSetUid), iconSetUid, row, column); } - public DefaultIcon(@NonNull IconSetManager iconSetManager, @NonNull Texture texture, @NonNull String iconSetUid, int row, int column) { - super(texture); + private DefaultIcon(@NonNull IconSetManager iconSetManager, QuadMesh mesh, @NonNull Texture texture, @NonNull String iconSetUid, int row, int column) { + super(mesh, texture); this.iconSetManager = iconSetManager; setFrame(row, column); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java index f87146ad..694dd538 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/DefaultImageManager.java @@ -1,11 +1,11 @@ package com.bartlomiejpluta.base.engine.world.image.manager; import com.bartlomiejpluta.base.api.image.Image; -import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.util.res.ResourcesManager; import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset; import com.bartlomiejpluta.base.engine.world.image.model.DefaultImage; @@ -23,6 +23,11 @@ import java.util.Map; @Component @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DefaultImageManager implements ImageManager { + private static final float QUAD_WIDTH = 1; + private static final float QUAD_HEIGHT = 1; + private static final float QUAD_ORIGIN_X = 0; + private static final float QUAD_ORIGIN_Y = 0; + private final MeshManager meshManager; private final TextureManager textureManager; private final ResourcesManager resourcesManager; @@ -30,11 +35,6 @@ public class DefaultImageManager implements ImageManager { private final Map imageBuffers = new HashMap<>(); private final ProjectConfiguration configuration; - @Override - public void init() { -// TODO mesh = meshManager.createQuad(1, 1, 0, 0); - } - @Override public void registerAsset(ImageAsset asset) { log.info("Registering [{}] image asset under UID: [{}]", asset.getSource(), asset.getUid()); @@ -63,7 +63,7 @@ public class DefaultImageManager implements ImageManager { var initialHeight = height / gcd; log.info("Creating new image on asset with UID: [{}]", uid); - return new DefaultImage(texture, initialWidth, initialHeight, gcd); + return new DefaultImage(meshManager.createQuad(QUAD_WIDTH, QUAD_HEIGHT, QUAD_ORIGIN_X, QUAD_ORIGIN_Y), texture, initialWidth, initialHeight, gcd); } @Override diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java index b2be4c48..2d3fc05a 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/manager/ImageManager.java @@ -7,5 +7,5 @@ import com.bartlomiejpluta.base.engine.common.manager.ByteBufferAssetManager; import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset; import com.bartlomiejpluta.base.internal.gc.Cleanable; -public interface ImageManager extends Initializable, AssetManager, ByteBufferAssetManager, Cleanable { +public interface ImageManager extends AssetManager, ByteBufferAssetManager, Cleanable { } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/model/DefaultImage.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/model/DefaultImage.java index d45e835f..44af96a1 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/model/DefaultImage.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/image/model/DefaultImage.java @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.engine.world.image.model; import com.bartlomiejpluta.base.api.image.Image; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.world.object.Sprite; import lombok.Getter; import lombok.NonNull; @@ -16,8 +17,8 @@ public class DefaultImage extends Sprite implements Image { private final int width; private final int height; - public DefaultImage(@NonNull Material texture, int primaryWidth, int primaryHeight, int factor) { - super(texture); + public DefaultImage(QuadMesh mesh, @NonNull Material texture, int primaryWidth, int primaryHeight, int factor) { + super(mesh, texture); this.primaryWidth = primaryWidth; this.primaryHeight = primaryHeight; this.factor = factor; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer2x2.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer2x2.java index 7d53d89d..0ff781f5 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer2x2.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer2x2.java @@ -1,6 +1,7 @@ package com.bartlomiejpluta.base.engine.world.map.layer.autotile; import com.bartlomiejpluta.base.api.map.model.GameMap; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet; import lombok.AccessLevel; @@ -54,8 +55,8 @@ public class AutoTileLayer2x2 extends BaseAutoTileLayer { private final int tileSetColumns; - public AutoTileLayer2x2(@NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) { - super(map, tileSet, rows, columns, connect, animated, animationDuration); + public AutoTileLayer2x2(MeshManager meshManager, @NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) { + super(meshManager, map, tileSet, rows, columns, connect, animated, animationDuration); this.tileSetColumns = tileSet.getSetsColumns(); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer3x2.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer3x2.java index 84039c0f..d651329d 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer3x2.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/AutoTileLayer3x2.java @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.engine.world.map.layer.autotile; import com.bartlomiejpluta.base.api.map.layer.autotile.AutoTileLayer; import com.bartlomiejpluta.base.api.map.model.GameMap; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet; import lombok.AccessLevel; @@ -62,8 +63,8 @@ public class AutoTileLayer3x2 extends BaseAutoTileLayer implements AutoTileLayer private final int tileSetColumns; - public AutoTileLayer3x2(@NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) { - super(map, tileSet, rows, columns, connect, animated, animationDuration); + public AutoTileLayer3x2(MeshManager meshManager, @NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) { + super(meshManager, map, tileSet, rows, columns, connect, animated, animationDuration); this.tileSetColumns = tileSet.getSetsColumns(); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/BaseAutoTileLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/BaseAutoTileLayer.java index 3cbda7e3..a3bf3ad7 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/BaseAutoTileLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/autotile/BaseAutoTileLayer.java @@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.engine.world.map.layer.autotile; import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.map.model.GameMap; import com.bartlomiejpluta.base.api.screen.Screen; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet; import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer; import com.bartlomiejpluta.base.engine.world.map.layer.util.ChunkManager; @@ -27,7 +28,7 @@ public abstract class BaseAutoTileLayer extends BaseLayer { private float accumulator = 0f; private boolean dirty = true; - public BaseAutoTileLayer(@NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) { + public BaseAutoTileLayer(MeshManager meshManager, @NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) { super(map); this.layer = new int[rows][columns]; this.connect = connect; @@ -36,6 +37,7 @@ public abstract class BaseAutoTileLayer extends BaseLayer { this.setsCount = tileSet.getSetsCount(); this.chunkManager = new ChunkManager( + meshManager, tileSet.getTexture(), rows * 4, columns * 4, diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/DefaultColorLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/DefaultColorLayer.java index 62cb3e1d..6f55f335 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/DefaultColorLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/color/DefaultColorLayer.java @@ -6,7 +6,7 @@ import com.bartlomiejpluta.base.api.map.model.GameMap; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.engine.core.gl.object.color.Color; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer; import com.bartlomiejpluta.base.engine.world.object.Sprite; import com.bartlomiejpluta.base.internal.object.Placeable; @@ -16,6 +16,11 @@ import org.joml.Matrix4fc; import org.joml.Vector2fc; public class DefaultColorLayer extends BaseLayer implements ColorLayer { + private static final float QUAD_WIDTH = 1; + private static final float QUAD_HEIGHT = 1; + private static final float QUAD_ORIGIN_X = 0; + private static final float QUAD_ORIGIN_Y = 0; + private final ColorPlane colorPlane; private final Material material; @@ -145,8 +150,7 @@ public class DefaultColorLayer extends BaseLayer implements ColorLayer { private static class ColorPlane extends Sprite { public ColorPlane(@NonNull MeshManager meshManager, float red, float green, float blue, float alpha) { -// TODO (Custom Mesh): super(meshManager.createQuad(1, 1, 0, 0), Material.colored(red, green, blue, alpha)); - super(new Color(red, green, blue, alpha)); + super(meshManager.createQuad(QUAD_WIDTH, QUAD_HEIGHT, QUAD_ORIGIN_X, QUAD_ORIGIN_Y), new Color(red, green, blue, alpha)); } } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/DefaultTileLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/DefaultTileLayer.java index 44195835..cb543fff 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/DefaultTileLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/tile/DefaultTileLayer.java @@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.map.layer.tile.TileLayer; import com.bartlomiejpluta.base.api.map.model.GameMap; import com.bartlomiejpluta.base.api.screen.Screen; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer; import com.bartlomiejpluta.base.engine.world.map.layer.util.ChunkManager; import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet; @@ -13,10 +14,10 @@ import lombok.NonNull; public class DefaultTileLayer extends BaseLayer implements TileLayer { private final ChunkManager chunkManager; - public DefaultTileLayer(@NonNull GameMap map, @NonNull TileSet tileSet, int rows, int columns) { + public DefaultTileLayer(MeshManager meshManager, @NonNull GameMap map, @NonNull TileSet tileSet, int rows, int columns) { super(map); - this.chunkManager = new ChunkManager(tileSet.texture(), rows, columns); + this.chunkManager = new ChunkManager(meshManager, tileSet.texture(), rows, columns); } @Override diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/ChunkManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/ChunkManager.java index efa6a6fd..41892dd9 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/ChunkManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/ChunkManager.java @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.engine.world.map.layer.util; import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.screen.Screen; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.internal.gc.Disposable; import com.bartlomiejpluta.base.internal.render.Renderable; @@ -14,6 +15,7 @@ import java.util.Map; public class ChunkManager implements Renderable, Disposable { private static final int DEFAULT_CHUNK_SIZE = 10; + private final MeshManager meshManager; private final Map chunks = new HashMap<>(); private final Map> chunkTileIds = new HashMap<>(); @@ -23,19 +25,20 @@ public class ChunkManager implements Renderable, Disposable { private final float tileWidth, tileHeight; private final int mapRows, mapColumns; - public ChunkManager(Texture tileSet, int rows, int columns) { - this(tileSet, rows, columns, DEFAULT_CHUNK_SIZE); + public ChunkManager(MeshManager meshManager, Texture tileSet, int rows, int columns) { + this(meshManager, tileSet, rows, columns, DEFAULT_CHUNK_SIZE); } - public ChunkManager(Texture tileSet, int rows, int columns, Vector2fc tileSize) { - this(tileSet, rows, columns, tileSize, DEFAULT_CHUNK_SIZE); + public ChunkManager(MeshManager meshManager, Texture tileSet, int rows, int columns, Vector2fc tileSize) { + this(meshManager, tileSet, rows, columns, tileSize, DEFAULT_CHUNK_SIZE); } - public ChunkManager(Texture tileSet, int rows, int columns, int chunkSize) { - this(tileSet, rows, columns, tileSet.getSpriteSize(), chunkSize); + public ChunkManager(MeshManager meshManager, Texture tileSet, int rows, int columns, int chunkSize) { + this(meshManager, tileSet, rows, columns, tileSet.getSpriteSize(), chunkSize); } - public ChunkManager(@NonNull Texture tileSet, int rows, int columns, @NonNull Vector2fc tileSize, int chunkSize) { + public ChunkManager(MeshManager meshManager, @NonNull Texture tileSet, int rows, int columns, @NonNull Vector2fc tileSize, int chunkSize) { + this.meshManager = meshManager; this.tileSet = tileSet; this.mapRows = rows; this.mapColumns = columns; @@ -64,7 +67,7 @@ public class ChunkManager implements Renderable, Disposable { int chunkX = (column / chunkSize) * (int) tileWidth * chunkSize; int chunkY = (row / chunkSize) * (int) tileHeight * chunkSize; - chunk = new TileChunk(tileSet, chunkSize); + chunk = new TileChunk(meshManager, tileSet, chunkSize); chunk.setPosition(chunkX, chunkY); chunks.put(chunkKey, chunk); chunkTileIds.put(chunkKey, new HashMap<>()); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/TileChunk.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/TileChunk.java index c4340a96..8d80e436 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/TileChunk.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/util/TileChunk.java @@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadTemplate; import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.engine.core.gl.shader.constant.Shader; @@ -14,6 +15,7 @@ import com.bartlomiejpluta.base.internal.object.Placeable; import com.bartlomiejpluta.base.internal.render.BoundingBox; import com.bartlomiejpluta.base.internal.render.Renderable; import com.bartlomiejpluta.base.internal.render.ShaderManager; +import lombok.NonNull; public class TileChunk extends Model implements Placeable, Renderable, Disposable, BoundingBox { private final Texture tileSet; @@ -23,14 +25,14 @@ public class TileChunk extends Model implements Placeable, Renderable, Disposabl private final float originX; private final float originY; - public TileChunk(Texture tileSet, int chunkSize) { - this(tileSet, chunkSize, 0, 0); + public TileChunk(MeshManager meshManager, Texture tileSet, int chunkSize) { + this(meshManager, tileSet, chunkSize, 0, 0); } - public TileChunk(Texture tileSet, int chunkSize, float originX, float originY) { + public TileChunk(@NonNull MeshManager meshManager, @NonNull Texture tileSet, int chunkSize, float originX, float originY) { this.tileSet = tileSet; this.chunkSize = chunkSize; - this.mesh = new Mesh(chunkSize * chunkSize); + this.mesh = meshManager.createMesh(chunkSize * chunkSize); this.template = new QuadTemplate(tileSet.getSpriteSize().x(), tileSet.getSpriteSize().y(), originX, originY); this.originX = originX; this.originY = originY; 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 ca42a8c2..470a4659 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 @@ -12,9 +12,8 @@ import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility; import com.bartlomiejpluta.base.api.map.layer.tile.TileLayer; import com.bartlomiejpluta.base.api.map.model.GameMap; import com.bartlomiejpluta.base.api.screen.Screen; -import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture; import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet; import com.bartlomiejpluta.base.engine.world.map.layer.autotile.AutoTileLayer2x2; import com.bartlomiejpluta.base.engine.world.map.layer.autotile.AutoTileLayer3x2; @@ -37,6 +36,7 @@ import java.util.Arrays; import java.util.List; public class DefaultGameMap implements Renderable, Updatable, GameMap { + private final MeshManager meshManager; @Getter private final List layers = new ArrayList<>(); @@ -65,7 +65,8 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap { @Getter private final Vector3f ambientColor = new Vector3f(1, 1, 1); - public DefaultGameMap(int tileWidth, int tileHeight, int rows, int columns, String handler) { + public DefaultGameMap(MeshManager meshManager, int tileWidth, int tileHeight, int rows, int columns, String handler) { + this.meshManager = meshManager; this.rows = rows; this.columns = columns; this.stepSize = new Vector2f(tileWidth, tileHeight); @@ -135,21 +136,21 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap { } public TileLayer createTileLayer(@NonNull TileSet tileSet) { - var layer = new DefaultTileLayer(this, tileSet, rows, columns); + var layer = new DefaultTileLayer(meshManager, this, tileSet, rows, columns); layers.add(layer); return layer; } public AutoTileLayer3x2 createAutoTileLayer3x2(@NonNull AutoTileSet tileSet, boolean animated, double animationDuration, boolean connect) { - var layer = new AutoTileLayer3x2(this, tileSet, rows, columns, connect, animated, animationDuration); + var layer = new AutoTileLayer3x2(meshManager, this, tileSet, rows, columns, connect, animated, animationDuration); layers.add(layer); return layer; } public AutoTileLayer2x2 createAutoTileLayer2x2(@NonNull AutoTileSet tileSet, boolean animated, double animationDuration, boolean connect) { - var layer = new AutoTileLayer2x2(this, tileSet, rows, columns, connect, animated, animationDuration); + var layer = new AutoTileLayer2x2(meshManager, this, tileSet, rows, columns, connect, animated, animationDuration); layers.add(layer); return layer; 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 c2852351..4a99adc4 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 @@ -3,7 +3,7 @@ package com.bartlomiejpluta.base.engine.world.map.serial; import com.bartlomiejpluta.base.api.map.layer.image.ImageLayerMode; import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility; import com.bartlomiejpluta.base.engine.error.AppException; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.autotile.manager.AutoTileManager; import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager; import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap; @@ -28,7 +28,7 @@ public class ProtobufMapDeserializer extends MapDeserializer { @Override protected DefaultGameMap parse(InputStream input) throws Exception { var proto = GameMapProto.GameMap.parseFrom(input); - var map = new DefaultGameMap(proto.getTileWidth(), proto.getTileHeight(), proto.getRows(), proto.getColumns(), proto.getHandler()); + var map = new DefaultGameMap(meshManager, proto.getTileWidth(), proto.getTileHeight(), proto.getRows(), proto.getColumns(), proto.getHandler()); proto.getLayersList().forEach(layer -> deserializeLayer(map, layer)); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java index 0da1e8b5..b5945671 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java @@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.move.Movable; import com.bartlomiejpluta.base.api.move.Movement; import com.bartlomiejpluta.base.engine.core.engine.DefaultGameEngine; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; +import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; import com.bartlomiejpluta.base.engine.world.animation.model.AnimatedSprite; import com.bartlomiejpluta.base.internal.program.Updatable; import com.bartlomiejpluta.base.util.math.MathUtil; @@ -20,8 +21,8 @@ public abstract class MovableSprite extends AnimatedSprite implements Movable, U @Getter private Movement movement; - public MovableSprite(Material material) { - super(material); + public MovableSprite(QuadMesh mesh, Material material) { + super(mesh, material); } @Override diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/object/Sprite.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/object/Sprite.java index 732bb8d9..bf7efb42 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/object/Sprite.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/object/Sprite.java @@ -3,9 +3,7 @@ package com.bartlomiejpluta.base.engine.world.object; import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; -import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh; -import com.bartlomiejpluta.base.engine.core.gl.shader.constant.Shader; import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName; import com.bartlomiejpluta.base.engine.world.location.LocationableModel; import com.bartlomiejpluta.base.internal.render.BoundingBox; @@ -21,18 +19,23 @@ public abstract class Sprite extends LocationableModel implements Renderable, Bo @Getter private Material material; - private final QuadMesh quad; - private final float width = 1f; - private final float height = 1f; - private final float originX = .5f; - private final float originY = 1f; + private final QuadMesh mesh; + private final float width; + private final float height; + private final float originX; + private final float originY; @Getter private float[][] textureCoordinates; - public Sprite(Material material) { + public Sprite(@NonNull QuadMesh mesh, @NonNull Material material) { this.material = material; - this.quad = Mesh.quad(width, height, originX, originY); + this.mesh = mesh; + + this.width = mesh.getWidth(); + this.height = mesh.getHeight(); + this.originX = mesh.getOriginX(); + this.originY = mesh.getOriginY(); updateTextureCoordinates(); } @@ -51,7 +54,7 @@ public abstract class Sprite extends LocationableModel implements Renderable, Bo } public void setFrame(int id) { - quad.setTextureCoordinates(textureCoordinates[id]); + mesh.setTextureCoordinates(textureCoordinates[id]); } @Override @@ -92,6 +95,6 @@ public abstract class Sprite extends LocationableModel implements Renderable, Bo shaderManager.setUniform(UniformName.UNI_PROJECTION_MATRIX, camera.getProjectionMatrix()); shaderManager.setUniform(UniformName.UNI_VIEW_MODEL_MATRIX, camera.computeViewModelMatrix(getModelMatrix())); - quad.render(screen, camera, shaderManager); + mesh.render(screen, camera, shaderManager); } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/DefaultTileSetManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/DefaultTileSetManager.java index 257e6379..e932a0b9 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/DefaultTileSetManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/DefaultTileSetManager.java @@ -3,7 +3,6 @@ package com.bartlomiejpluta.base.engine.world.tileset.manager; import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration; -import com.bartlomiejpluta.base.engine.util.mesh.MeshManager; import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset; import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet; import lombok.RequiredArgsConstructor; @@ -19,16 +18,10 @@ import java.util.Map; @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DefaultTileSetManager implements TileSetManager { private final TextureManager textureManager; - private final MeshManager meshManager; private final Map tileSets = new HashMap<>(); private final Map assets = new HashMap<>(); private final ProjectConfiguration configuration; - @Override - public void init() { -// TODO this.mesh = meshManager.createQuad(1, 1, 0, 0); - } - @Override public void registerAsset(TileSetAsset asset) { log.info("Registering [{}] tile set asset under UID: [{}]", asset.getSource(), asset.getUid()); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/TileSetManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/TileSetManager.java index c5794c97..98c8c440 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/TileSetManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/tileset/manager/TileSetManager.java @@ -1,10 +1,9 @@ package com.bartlomiejpluta.base.engine.world.tileset.manager; -import com.bartlomiejpluta.base.engine.common.init.Initializable; import com.bartlomiejpluta.base.engine.common.manager.AssetManager; import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset; import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet; import com.bartlomiejpluta.base.internal.gc.Cleanable; -public interface TileSetManager extends Initializable, AssetManager, Cleanable { +public interface TileSetManager extends AssetManager, Cleanable { }