Extract ImageLayer interface to :api
This commit is contained in:
@@ -2,11 +2,14 @@ package com.bartlomiejpluta.base.api.game.context;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
||||
import com.bartlomiejpluta.base.api.game.map.Image;
|
||||
|
||||
public interface Context {
|
||||
void openMap(String mapUid);
|
||||
|
||||
Entity createEntity(String entitySetUid);
|
||||
|
||||
Image getImage(String imageUid);
|
||||
|
||||
Camera getCamera();
|
||||
}
|
||||
|
||||
@@ -5,10 +5,20 @@ import com.bartlomiejpluta.base.api.game.entity.Movement;
|
||||
import org.joml.Vector2f;
|
||||
|
||||
public interface GameMap {
|
||||
float getWidth();
|
||||
|
||||
float getHeight();
|
||||
|
||||
int getRows();
|
||||
|
||||
int getColumns();
|
||||
|
||||
Vector2f getSize();
|
||||
|
||||
TileLayer getTileLayer(int layerIndex);
|
||||
|
||||
ImageLayer getImageLayer(int layerIndex);
|
||||
|
||||
void addEntity(int objectLayerIndex, Entity entity);
|
||||
|
||||
void removeEntity(int objectLayerIndex, Entity entity);
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.bartlomiejpluta.base.api.game.map;
|
||||
|
||||
import com.bartlomiejpluta.base.api.internal.object.Placeable;
|
||||
import com.bartlomiejpluta.base.api.internal.render.Renderable;
|
||||
|
||||
public interface Image extends Placeable, Renderable {
|
||||
int getPrimaryWidth();
|
||||
|
||||
int getPrimaryHeight();
|
||||
|
||||
int getFactor();
|
||||
|
||||
int getWidth();
|
||||
|
||||
int getHeight();
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.bartlomiejpluta.base.api.game.map;
|
||||
|
||||
public interface ImageLayer extends Layer {
|
||||
void setImage(Image image);
|
||||
|
||||
void setOpacity(float opacity);
|
||||
|
||||
void setPosition(float x, float y);
|
||||
|
||||
void setMode(ImageLayerMode mode);
|
||||
|
||||
void setScale(float scaleX, float scaleY);
|
||||
|
||||
void setParallax(boolean parallax);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.bartlomiejpluta.base.engine.world.map.layer.image;
|
||||
package com.bartlomiejpluta.base.api.game.map;
|
||||
|
||||
public enum ImageLayerMode {
|
||||
NORMAL,
|
||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.engine.project.model;
|
||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.game.context.Context;
|
||||
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
||||
import com.bartlomiejpluta.base.api.game.map.Image;
|
||||
import com.bartlomiejpluta.base.api.game.map.MapHandler;
|
||||
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
|
||||
@@ -57,6 +58,11 @@ public class RenderableContext implements Context, Updatable, Renderable {
|
||||
return entityManager.createEntity(entitySetUid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Image getImage(String imageUid) {
|
||||
return imageManager.loadObject(imageUid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Camera getCamera() {
|
||||
return camera;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.bartlomiejpluta.base.engine.world.image.manager;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.map.Image;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.texture.TextureManager;
|
||||
import com.bartlomiejpluta.base.engine.error.AppException;
|
||||
@@ -7,7 +8,7 @@ import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration;
|
||||
import com.bartlomiejpluta.base.engine.util.math.MathUtil;
|
||||
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
|
||||
import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset;
|
||||
import com.bartlomiejpluta.base.engine.world.image.model.Image;
|
||||
import com.bartlomiejpluta.base.engine.world.image.model.DefaultImage;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -51,7 +52,7 @@ public class DefaultImageManager implements ImageManager {
|
||||
var material = Material.textured(texture);
|
||||
log.info("Creating new image on asset with UID: [{}]", uid);
|
||||
|
||||
return new Image(mesh, material, initialWidth, initialHeight, gcd);
|
||||
return new DefaultImage(mesh, material, initialWidth, initialHeight, gcd);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.bartlomiejpluta.base.engine.world.image.manager;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.map.Image;
|
||||
import com.bartlomiejpluta.base.api.internal.gc.Cleanable;
|
||||
import com.bartlomiejpluta.base.engine.common.manager.AssetManager;
|
||||
import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset;
|
||||
import com.bartlomiejpluta.base.engine.world.image.model.Image;
|
||||
|
||||
public interface ImageManager extends AssetManager<ImageAsset, Image>, Cleanable {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.bartlomiejpluta.base.engine.world.image.model;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.map.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.world.object.Sprite;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class DefaultImage extends Sprite implements Image {
|
||||
private final int primaryWidth;
|
||||
private final int primaryHeight;
|
||||
private final int factor;
|
||||
private final int width;
|
||||
private final int height;
|
||||
|
||||
public DefaultImage(Mesh mesh, Material texture, int primaryWidth, int primaryHeight, int factor) {
|
||||
super(mesh, texture);
|
||||
this.primaryWidth = primaryWidth;
|
||||
this.primaryHeight = primaryHeight;
|
||||
this.factor = factor;
|
||||
|
||||
this.width = primaryWidth * factor;
|
||||
this.height = primaryHeight * factor;
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package com.bartlomiejpluta.base.engine.world.image.model;
|
||||
|
||||
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.world.object.Sprite;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class Image extends Sprite {
|
||||
private final int initialWidth;
|
||||
private final int initialHeight;
|
||||
private final int gcd;
|
||||
|
||||
public Image(Mesh mesh, Material texture, int initialWidth, int initialHeight, int gcd) {
|
||||
super(mesh, texture);
|
||||
this.initialWidth = initialWidth;
|
||||
this.initialHeight = initialHeight;
|
||||
this.gcd = gcd;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
package com.bartlomiejpluta.base.engine.world.map.layer.image;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.game.map.GameMap;
|
||||
import com.bartlomiejpluta.base.api.game.map.Image;
|
||||
import com.bartlomiejpluta.base.api.game.map.ImageLayer;
|
||||
import com.bartlomiejpluta.base.api.game.map.ImageLayerMode;
|
||||
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
||||
import com.bartlomiejpluta.base.engine.world.image.model.DefaultImage;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
|
||||
public class DefaultImageLayer implements ImageLayer {
|
||||
private final float mapWidth;
|
||||
private final float mapHeight;
|
||||
|
||||
@NonNull
|
||||
@Getter
|
||||
private DefaultImage image;
|
||||
private float imagePrimaryWidth;
|
||||
private float imagePrimaryHeight;
|
||||
|
||||
private float x;
|
||||
private float y;
|
||||
private float scaleX;
|
||||
private float scaleY;
|
||||
|
||||
@NonNull
|
||||
private ImageLayerMode mode;
|
||||
|
||||
@Getter
|
||||
private float opacity;
|
||||
|
||||
@Setter
|
||||
private boolean parallax;
|
||||
|
||||
public DefaultImageLayer(GameMap map, Image image, float opacity, float x, float y, float scaleX, float scaleY, ImageLayerMode mode, boolean parallax) {
|
||||
this.mapWidth = map.getWidth();
|
||||
this.mapHeight = map.getHeight();
|
||||
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
|
||||
this.scaleX = scaleX;
|
||||
this.scaleY = scaleY;
|
||||
|
||||
this.mode = mode;
|
||||
this.parallax = parallax;
|
||||
this.opacity = opacity;
|
||||
|
||||
setImage(image);
|
||||
}
|
||||
|
||||
private void recalculate() {
|
||||
switch (mode) {
|
||||
case NORMAL -> image.setScale(image.getWidth() * scaleX, image.getHeight() * scaleY);
|
||||
case FIT_MAP -> image.setScale(mapWidth / imagePrimaryWidth, mapHeight / imagePrimaryHeight);
|
||||
}
|
||||
|
||||
if (mode == ImageLayerMode.NORMAL) {
|
||||
System.out.printf("%d * %f, %d * %f", image.getWidth(), scaleX, image.getHeight(), scaleY);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImage(Image image) {
|
||||
this.image = (DefaultImage) image;
|
||||
this.imagePrimaryWidth = image.getPrimaryWidth();
|
||||
this.imagePrimaryHeight = image.getPrimaryHeight();
|
||||
|
||||
this.image.setPosition(x, y);
|
||||
|
||||
this.image.getMaterial().setAlpha(opacity);
|
||||
|
||||
recalculate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOpacity(float opacity) {
|
||||
this.opacity = opacity;
|
||||
|
||||
this.image.getMaterial().setAlpha(opacity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPosition(float x, float y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMode(ImageLayerMode mode) {
|
||||
this.mode = mode;
|
||||
|
||||
recalculate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setScale(float scaleX, float scaleY) {
|
||||
this.x = scaleX;
|
||||
this.y = scaleY;
|
||||
|
||||
recalculate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(float dt) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
if (image != null) {
|
||||
if (parallax) {
|
||||
var cameraPosition = camera.getPosition();
|
||||
image.setPosition(cameraPosition.x + x, cameraPosition.y + y);
|
||||
}
|
||||
|
||||
if (mode == ImageLayerMode.FIT_SCREEN) {
|
||||
image.setScale(window.getWidth() / imagePrimaryWidth, window.getHeight() / imagePrimaryHeight);
|
||||
}
|
||||
|
||||
image.render(window, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
package com.bartlomiejpluta.base.engine.world.map.layer.image;
|
||||
|
||||
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.internal.render.ShaderManager;
|
||||
import com.bartlomiejpluta.base.engine.world.image.model.Image;
|
||||
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
|
||||
import lombok.NonNull;
|
||||
|
||||
public class ImageLayer implements Layer {
|
||||
private final float mapWidth;
|
||||
private final float mapHeight;
|
||||
|
||||
@NonNull
|
||||
private Image image;
|
||||
private float imageInitialWidth;
|
||||
private float imageInitialHeight;
|
||||
private float gcd;
|
||||
|
||||
private float x;
|
||||
private float y;
|
||||
private float scaleX;
|
||||
private float scaleY;
|
||||
|
||||
@NonNull
|
||||
private ImageLayerMode mode;
|
||||
|
||||
private boolean parallax;
|
||||
|
||||
public ImageLayer(DefaultGameMap map, Image image, float opacity, float x, float y, float scaleX, float scaleY, ImageLayerMode mode, boolean parallax) {
|
||||
this.mapWidth = map.getWidth();
|
||||
this.mapHeight = map.getHeight();
|
||||
|
||||
this.image = image;
|
||||
this.imageInitialWidth = image.getInitialWidth();
|
||||
this.imageInitialHeight = image.getInitialHeight();
|
||||
this.gcd = image.getGcd();
|
||||
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.scaleX = scaleX;
|
||||
this.scaleY = scaleY;
|
||||
this.mode = mode;
|
||||
this.parallax = parallax;
|
||||
|
||||
this.image.getMaterial().setAlpha(opacity);
|
||||
this.image.setPosition(x, y);
|
||||
|
||||
switch (mode) {
|
||||
case NORMAL -> image.setScale(mapWidth / imageInitialWidth, mapHeight / imageInitialHeight);
|
||||
case FIT_MAP -> image.setScale(image.getGcd() * imageInitialWidth * scaleX, image.getGcd() * imageInitialHeight * scaleY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
if (image != null) {
|
||||
if (parallax) {
|
||||
var cameraPosition = camera.getPosition();
|
||||
image.setPosition(cameraPosition.x + x, cameraPosition.y + y);
|
||||
}
|
||||
|
||||
if (mode == ImageLayerMode.FIT_SCREEN) {
|
||||
image.setScale(window.getWidth() / imageInitialWidth, window.getHeight() / imageInitialHeight);
|
||||
}
|
||||
|
||||
image.render(window, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(float dt) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -3,20 +3,15 @@ package com.bartlomiejpluta.base.engine.world.map.model;
|
||||
import com.bartlomiejpluta.base.api.game.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.game.entity.Entity;
|
||||
import com.bartlomiejpluta.base.api.game.entity.Movement;
|
||||
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.TileLayer;
|
||||
import com.bartlomiejpluta.base.api.game.map.*;
|
||||
import com.bartlomiejpluta.base.api.game.window.Window;
|
||||
import com.bartlomiejpluta.base.api.internal.logic.Updatable;
|
||||
import com.bartlomiejpluta.base.api.internal.render.Renderable;
|
||||
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
|
||||
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
|
||||
import com.bartlomiejpluta.base.engine.world.entity.model.DefaultEntity;
|
||||
import com.bartlomiejpluta.base.engine.world.image.model.Image;
|
||||
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.ImageLayerMode;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.image.DefaultImageLayer;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.object.ObjectLayer;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.tile.DefaultTileLayer;
|
||||
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
||||
@@ -88,6 +83,11 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
||||
return (TileLayer) layers.get(layerIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImageLayer getImageLayer(int layerIndex) {
|
||||
return (ImageLayer) layers.get(layerIndex);
|
||||
}
|
||||
|
||||
public int createObjectLayer() {
|
||||
var passageMap = new PassageAbility[rows][columns];
|
||||
for (int i = 0; i < rows; ++i) {
|
||||
@@ -112,10 +112,11 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
||||
return layers.size() - 1;
|
||||
}
|
||||
|
||||
public int createImageLayer(Image image, float opacity, float x, float y, float scaleX, float scaleY, ImageLayerMode mode, boolean parallax) {
|
||||
layers.add(new ImageLayer(this, image, opacity, x, y, scaleX, scaleY, mode, parallax));
|
||||
public ImageLayer createImageLayer(Image image, float opacity, float x, float y, float scaleX, float scaleY, ImageLayerMode mode, boolean parallax) {
|
||||
var layer = new DefaultImageLayer(this, image, opacity, x, y, scaleX, scaleY, mode, parallax);
|
||||
layers.add(layer);
|
||||
|
||||
return layers.size() - 1;
|
||||
return layer;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.bartlomiejpluta.base.engine.world.map.serial;
|
||||
|
||||
import com.bartlomiejpluta.base.api.game.map.ImageLayerMode;
|
||||
import com.bartlomiejpluta.base.api.game.map.PassageAbility;
|
||||
import com.bartlomiejpluta.base.engine.error.AppException;
|
||||
import com.bartlomiejpluta.base.engine.util.mesh.MeshManager;
|
||||
import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.image.ImageLayerMode;
|
||||
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
|
||||
import com.bartlomiejpluta.base.engine.world.tileset.manager.TileSetManager;
|
||||
import com.bartlomiejpluta.base.proto.GameMapProto;
|
||||
|
||||
Reference in New Issue
Block a user