From 6ee0f2a6cd1fe7a893595f35af5b8168c84000e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 23 Mar 2021 13:00:21 +0100 Subject: [PATCH] Make ImageManager shares common Mesh 1x1 among all images --- .../image/manager/DefaultImageManager.java | 7 +++- .../world/image/manager/ImageManager.java | 3 +- .../world/image/model/DefaultImage.java | 39 +++++++++++++++++++ .../map/layer/image/DefaultImageLayer.java | 16 ++++---- 4 files changed, 54 insertions(+), 11 deletions(-) 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 6a5a94bc..bbd67066 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 @@ -2,6 +2,7 @@ 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.Mesh; 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; @@ -29,7 +30,12 @@ public class DefaultImageManager implements ImageManager { private final Map assets = new HashMap<>(); private final Map imageBuffers = new HashMap<>(); private final ProjectConfiguration configuration; + private Mesh mesh; + @Override + public void init() { + mesh = meshManager.createQuad(1, 1, 0, 0); + } @Override public void registerAsset(ImageAsset asset) { @@ -52,7 +58,6 @@ public class DefaultImageManager implements ImageManager { var gcd = MathUtil.gcdEuclidean(width, height); var initialWidth = width / gcd; var initialHeight = height / gcd; - var mesh = meshManager.createQuad(initialWidth, initialHeight, 0, 0); var material = Material.textured(texture); log.info("Creating new image on asset with UID: [{}]", uid); 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 db48f1ea..adb64ad1 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 @@ -1,10 +1,11 @@ package com.bartlomiejpluta.base.engine.world.image.manager; import com.bartlomiejpluta.base.api.image.Image; +import com.bartlomiejpluta.base.engine.common.init.Initianizable; import com.bartlomiejpluta.base.engine.common.manager.AssetManager; 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 AssetManager, ByteBufferAssetManager, Cleanable { +public interface ImageManager extends Initianizable, 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 6192dedf..43618122 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 @@ -6,9 +6,11 @@ import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.world.object.Sprite; import lombok.Getter; import lombok.NonNull; +import org.joml.Vector2f; @Getter public class DefaultImage extends Sprite implements Image { + private final Vector2f imageScale = new Vector2f(1, 1); private final int primaryWidth; private final int primaryHeight; private final int factor; @@ -23,6 +25,8 @@ public class DefaultImage extends Sprite implements Image { this.width = primaryWidth * factor; this.height = primaryHeight * factor; + + super.setScale(width * imageScale.x, height * imageScale.y); } @Override @@ -34,4 +38,39 @@ public class DefaultImage extends Sprite implements Image { public float getOpacity() { return material.getColor().w(); } + + @Override + public void setScaleX(float scaleX) { + this.imageScale.x = scaleX; + super.setScaleX(width * scaleX); + } + + @Override + public void setScaleY(float scaleY) { + this.imageScale.y = scaleY; + super.setScaleY(height * scaleY); + } + + @Override + public void setScale(float scale) { + this.imageScale.x = scale; + this.imageScale.y = scale; + super.setScale(width * scale, height * scale); + } + + public void setScale(float scaleX, float scaleY) { + this.imageScale.x = scaleX; + this.imageScale.y = scaleY; + super.setScale(width * scaleX, height * scaleY); + } + + @Override + public float getScaleX() { + return imageScale.x; + } + + @Override + public float getScaleY() { + return imageScale.y; + } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/DefaultImageLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/DefaultImageLayer.java index 4ae4dcea..587a0c70 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/DefaultImageLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/image/DefaultImageLayer.java @@ -19,14 +19,13 @@ public class DefaultImageLayer extends BaseLayer implements ImageLayer { @NonNull @Getter private Image image; - private float imagePrimaryWidth; - private float imagePrimaryHeight; + private float imageWidth; + private float imageHeight; private float x; private float y; private float scaleX; private float scaleY; - private float factor; @NonNull private ImageLayerMode mode; @@ -57,17 +56,16 @@ public class DefaultImageLayer extends BaseLayer implements ImageLayer { private void recalculate() { switch (mode) { - case NORMAL -> image.setScale(factor * scaleX, factor * scaleY); - case FIT_MAP -> image.setScale(mapWidth / imagePrimaryWidth, mapHeight / imagePrimaryHeight); + case NORMAL -> image.setScale(scaleX, scaleY); + case FIT_MAP -> image.setScale(mapWidth / imageWidth, mapHeight / imageHeight); } } @Override public void setImage(Image image) { this.image = image; - this.imagePrimaryWidth = image.getPrimaryWidth(); - this.imagePrimaryHeight = image.getPrimaryHeight(); - this.factor = image.getFactor(); + this.imageWidth = image.getWidth(); + this.imageHeight = image.getHeight(); this.image.setPosition(x, y); @@ -115,7 +113,7 @@ public class DefaultImageLayer extends BaseLayer implements ImageLayer { } if (mode == ImageLayerMode.FIT_SCREEN) { - image.setScale(screen.getWidth() / imagePrimaryWidth, screen.getHeight() / imagePrimaryHeight); + image.setScale(screen.getWidth() / imageWidth, screen.getHeight() / imageHeight); } image.render(screen, camera, shaderManager);