Enable mesh manager support for new batched meshes
This commit is contained in:
@@ -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<Mesh> 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,7 +53,7 @@ public class Mesh implements Renderable, Disposable {
|
|||||||
@Getter
|
@Getter
|
||||||
private int currentQuadCount = 0;
|
private int currentQuadCount = 0;
|
||||||
|
|
||||||
public Mesh(int maxQuads) {
|
Mesh(int maxQuads) {
|
||||||
this.maxQuads = maxQuads;
|
this.maxQuads = maxQuads;
|
||||||
this.maxVertices = maxQuads * VERTICES_PER_QUAD * 2;
|
this.maxVertices = maxQuads * VERTICES_PER_QUAD * 2;
|
||||||
this.maxIndices = maxQuads * INDICES_PER_QUAD;
|
this.maxIndices = maxQuads * INDICES_PER_QUAD;
|
||||||
@@ -302,8 +302,4 @@ public class Mesh implements Renderable, Disposable {
|
|||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return currentQuadCount == 0;
|
return currentQuadCount == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static QuadMesh quad(float width, float height, float originX, float originY) {
|
|
||||||
return new QuadMesh(width, height, originX, originY);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -1,10 +1,23 @@
|
|||||||
package com.bartlomiejpluta.base.engine.core.gl.object.mesh;
|
package com.bartlomiejpluta.base.engine.core.gl.object.mesh;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
public class QuadMesh extends Mesh {
|
public class QuadMesh extends Mesh {
|
||||||
private final int quadId;
|
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) {
|
QuadMesh(float width, float height, float originX, float originY) {
|
||||||
this(new QuadTemplate(width, height, originX, originY));
|
this(new QuadTemplate(width, height, originX, originY));
|
||||||
}
|
}
|
||||||
@@ -12,6 +25,11 @@ public class QuadMesh extends Mesh {
|
|||||||
QuadMesh(@NonNull QuadTemplate template) {
|
QuadMesh(@NonNull QuadTemplate template) {
|
||||||
super(1);
|
super(1);
|
||||||
|
|
||||||
|
this.width = template.getWidth();
|
||||||
|
this.height = template.getHeight();
|
||||||
|
this.originX = template.getOriginX();
|
||||||
|
this.originY = template.getOriginY();
|
||||||
|
|
||||||
this.quadId = addQuad(template, 0, 0);
|
this.quadId = addQuad(template, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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...)");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package com.bartlomiejpluta.base.engine.util.mesh;
|
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
|
||||||
|
|
||||||
public interface MeshManager extends Cleanable {
|
|
||||||
}
|
|
||||||
@@ -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.common.manager.AssetManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.animation.asset.AnimationAsset;
|
import com.bartlomiejpluta.base.engine.world.animation.asset.AnimationAsset;
|
||||||
|
|
||||||
public interface AnimationManager extends Initializable, AssetManager<AnimationAsset, Animation> {
|
public interface AnimationManager extends AssetManager<AnimationAsset, Animation> {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.animation.manager;
|
package com.bartlomiejpluta.base.engine.world.animation.manager;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.animation.Animation;
|
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.core.gl.object.texture.TextureManager;
|
||||||
import com.bartlomiejpluta.base.engine.error.AppException;
|
import com.bartlomiejpluta.base.engine.error.AppException;
|
||||||
import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration;
|
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.asset.AnimationAsset;
|
||||||
import com.bartlomiejpluta.base.engine.world.animation.model.DefaultAnimation;
|
import com.bartlomiejpluta.base.engine.world.animation.model.DefaultAnimation;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -22,17 +22,17 @@ import java.util.Map;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class DefaultAnimationManager implements AnimationManager {
|
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 MeshManager meshManager;
|
||||||
private final TextureManager textureManager;
|
private final TextureManager textureManager;
|
||||||
private final Map<String, AnimationAsset> assets = new HashMap<>();
|
private final Map<String, AnimationAsset> assets = new HashMap<>();
|
||||||
private final Map<String, Vector2fc[]> frames = new HashMap<>();
|
private final Map<String, Vector2fc[]> frames = new HashMap<>();
|
||||||
private final ProjectConfiguration configuration;
|
private final ProjectConfiguration configuration;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
// TODO mesh = meshManager.createQuad(1, 1, 0.5f, 0.5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerAsset(AnimationAsset asset) {
|
public void registerAsset(AnimationAsset asset) {
|
||||||
log.info("Registering [{}] animation asset under UID: [{}]", asset.getSource(), asset.getUid());
|
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 source = configuration.projectFile("animations", asset.getSource());
|
||||||
var texture = textureManager.loadTexture(source, asset.getRows(), asset.getColumns());
|
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) {
|
private Vector2fc[] createFrames(int rows, int columns) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.engine.world.animation.model;
|
|||||||
import com.bartlomiejpluta.base.api.animation.Animated;
|
import com.bartlomiejpluta.base.api.animation.Animated;
|
||||||
import com.bartlomiejpluta.base.engine.core.engine.DefaultGameEngine;
|
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.material.Material;
|
||||||
|
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh;
|
||||||
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
||||||
import com.bartlomiejpluta.base.util.math.MathUtil;
|
import com.bartlomiejpluta.base.util.math.MathUtil;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
@@ -15,8 +16,8 @@ public abstract class AnimatedSprite extends Sprite implements Animated {
|
|||||||
private int intervalInMilliseconds = 100;
|
private int intervalInMilliseconds = 100;
|
||||||
protected int currentAnimationFrame;
|
protected int currentAnimationFrame;
|
||||||
|
|
||||||
public AnimatedSprite(Material material) {
|
public AnimatedSprite(QuadMesh mesh, Material material) {
|
||||||
super(material);
|
super(mesh, material);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract boolean shouldAnimate();
|
protected abstract boolean shouldAnimate();
|
||||||
|
|||||||
@@ -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.AnimationMovement;
|
||||||
import com.bartlomiejpluta.base.api.move.Direction;
|
import com.bartlomiejpluta.base.api.move.Direction;
|
||||||
import com.bartlomiejpluta.base.api.move.Movement;
|
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.core.gl.object.texture.Texture;
|
||||||
import com.bartlomiejpluta.base.engine.world.movement.MovableSprite;
|
import com.bartlomiejpluta.base.engine.world.movement.MovableSprite;
|
||||||
import com.bartlomiejpluta.base.util.path.Path;
|
import com.bartlomiejpluta.base.util.path.Path;
|
||||||
@@ -50,8 +51,8 @@ public class DefaultAnimation extends MovableSprite implements Animation {
|
|||||||
@Getter
|
@Getter
|
||||||
private final CompletableFuture<Animation> future = new CompletableFuture<>();
|
private final CompletableFuture<Animation> future = new CompletableFuture<>();
|
||||||
|
|
||||||
public DefaultAnimation(Texture texture, @NonNull Vector2fc[] frames) {
|
public DefaultAnimation(QuadMesh mesh, Texture texture, @NonNull Vector2fc[] frames) {
|
||||||
super(texture);
|
super(mesh, texture);
|
||||||
this.frames = frames;
|
this.frames = frames;
|
||||||
this.lastFrameIndex = frames.length - 1;
|
this.lastFrameIndex = frames.length - 1;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.autotile.manager;
|
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.common.manager.AssetManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.autotile.asset.AutoTileSetAsset;
|
import com.bartlomiejpluta.base.engine.world.autotile.asset.AutoTileSetAsset;
|
||||||
import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet;
|
import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet;
|
||||||
|
|
||||||
public interface AutoTileManager extends Initializable, AssetManager<AutoTileSetAsset, AutoTileSet> {
|
public interface AutoTileManager extends AssetManager<AutoTileSetAsset, AutoTileSet> {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,6 @@ public class DefaultAutoTileSetManager implements AutoTileManager {
|
|||||||
private final Map<String, AutoTileSetAsset> assets = new HashMap<>();
|
private final Map<String, AutoTileSetAsset> assets = new HashMap<>();
|
||||||
private final ProjectConfiguration configuration;
|
private final ProjectConfiguration configuration;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerAsset(AutoTileSetAsset asset) {
|
public void registerAsset(AutoTileSetAsset asset) {
|
||||||
log.info("Registering [{}] auto tile set asset under UID: [{}]", asset.getSource(), asset.getUid());
|
log.info("Registering [{}] auto tile set asset under UID: [{}]", asset.getSource(), asset.getUid());
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ import com.bartlomiejpluta.base.api.character.Character;
|
|||||||
import com.bartlomiejpluta.base.engine.common.init.Initializable;
|
import com.bartlomiejpluta.base.engine.common.init.Initializable;
|
||||||
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
||||||
|
|
||||||
public interface CharacterManager extends Initializable, Cleanable {
|
public interface CharacterManager extends Cleanable {
|
||||||
Character createCharacter(String characterSetUid);
|
Character createCharacter(String characterSetUid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.character.manager;
|
package com.bartlomiejpluta.base.engine.world.character.manager;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.character.Character;
|
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.config.CharacterSpriteConfiguration;
|
||||||
import com.bartlomiejpluta.base.engine.world.character.model.DefaultCharacter;
|
import com.bartlomiejpluta.base.engine.world.character.model.DefaultCharacter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -13,18 +14,18 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor(onConstructor_ = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor_ = @__(@Autowired))
|
||||||
public class DefaultCharacterManager implements CharacterManager {
|
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 MeshManager meshManager;
|
||||||
private final CharacterSetManager characterSetManager;
|
private final CharacterSetManager characterSetManager;
|
||||||
private final CharacterSpriteConfiguration configuration;
|
private final CharacterSpriteConfiguration configuration;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
// TODO mesh = meshManager.createQuad(1, 1, 0.5f, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Character createCharacter(String characterSetUid) {
|
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
|
@Override
|
||||||
|
|||||||
@@ -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.CharacterMovement;
|
||||||
import com.bartlomiejpluta.base.api.move.Direction;
|
import com.bartlomiejpluta.base.api.move.Direction;
|
||||||
import com.bartlomiejpluta.base.api.move.Movement;
|
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.error.AppException;
|
||||||
import com.bartlomiejpluta.base.engine.world.character.manager.CharacterSetManager;
|
import com.bartlomiejpluta.base.engine.world.character.manager.CharacterSetManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.movement.MovableSprite;
|
import com.bartlomiejpluta.base.engine.world.movement.MovableSprite;
|
||||||
@@ -53,12 +54,12 @@ public class DefaultCharacter extends MovableSprite implements Character {
|
|||||||
|
|
||||||
private boolean animationEnabled = true;
|
private boolean animationEnabled = true;
|
||||||
|
|
||||||
public DefaultCharacter(CharacterSetManager characterSetManager, @NonNull String characterSetUid, int defaultSpriteColumn) {
|
public DefaultCharacter(CharacterSetManager characterSetManager, QuadMesh mesh, @NonNull String characterSetUid, int defaultSpriteColumn) {
|
||||||
this(characterSetManager.loadObject(characterSetUid), characterSetManager, defaultSpriteColumn);
|
this(mesh, characterSetManager.loadObject(characterSetUid), characterSetManager, defaultSpriteColumn);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DefaultCharacter(@NonNull CharacterSet characterSet, @NonNull CharacterSetManager characterSetManager, int defaultSpriteColumn) {
|
private DefaultCharacter(QuadMesh mesh, @NonNull CharacterSet characterSet, @NonNull CharacterSetManager characterSetManager, int defaultSpriteColumn) {
|
||||||
super(characterSet.getTexture());
|
super(mesh, characterSet.getTexture());
|
||||||
|
|
||||||
this.defaultSpriteColumn = defaultSpriteColumn;
|
this.defaultSpriteColumn = defaultSpriteColumn;
|
||||||
this.characterSetManager = characterSetManager;
|
this.characterSetManager = characterSetManager;
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.icon.manager;
|
package com.bartlomiejpluta.base.engine.world.icon.manager;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.icon.Icon;
|
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 com.bartlomiejpluta.base.engine.world.icon.model.DefaultIcon;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -12,17 +13,17 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class DefaultIconManager implements IconManager {
|
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 MeshManager meshManager;
|
||||||
private final IconSetManager iconSetManager;
|
private final IconSetManager iconSetManager;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
// TODO: this.mesh = meshManager.createQuad(1, 1, 0.5f, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Icon createIcon(String iconSetUid, int row, int column) {
|
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
|
@Override
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ import com.bartlomiejpluta.base.api.icon.Icon;
|
|||||||
import com.bartlomiejpluta.base.engine.common.init.Initializable;
|
import com.bartlomiejpluta.base.engine.common.init.Initializable;
|
||||||
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
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);
|
Icon createIcon(String iconSetUid, int row, int column);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.event.Event;
|
|||||||
import com.bartlomiejpluta.base.api.event.EventType;
|
import com.bartlomiejpluta.base.api.event.EventType;
|
||||||
import com.bartlomiejpluta.base.api.icon.Icon;
|
import com.bartlomiejpluta.base.api.icon.Icon;
|
||||||
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
|
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.core.gl.object.texture.Texture;
|
||||||
import com.bartlomiejpluta.base.engine.error.AppException;
|
import com.bartlomiejpluta.base.engine.error.AppException;
|
||||||
import com.bartlomiejpluta.base.engine.world.icon.manager.IconSetManager;
|
import com.bartlomiejpluta.base.engine.world.icon.manager.IconSetManager;
|
||||||
@@ -43,12 +44,12 @@ public class DefaultIcon extends Sprite implements Icon {
|
|||||||
@Getter
|
@Getter
|
||||||
private int zIndex;
|
private int zIndex;
|
||||||
|
|
||||||
public DefaultIcon(IconSetManager iconSetManager, String iconSetUid, int row, int column) {
|
public DefaultIcon(IconSetManager iconSetManager, QuadMesh mesh, String iconSetUid, int row, int column) {
|
||||||
this(iconSetManager, iconSetManager.loadObject(iconSetUid), iconSetUid, row, 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) {
|
private DefaultIcon(@NonNull IconSetManager iconSetManager, QuadMesh mesh, @NonNull Texture texture, @NonNull String iconSetUid, int row, int column) {
|
||||||
super(texture);
|
super(mesh, texture);
|
||||||
this.iconSetManager = iconSetManager;
|
this.iconSetManager = iconSetManager;
|
||||||
setFrame(row, column);
|
setFrame(row, column);
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.image.manager;
|
package com.bartlomiejpluta.base.engine.world.image.manager;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.image.Image;
|
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.core.gl.object.texture.TextureManager;
|
||||||
import com.bartlomiejpluta.base.engine.error.AppException;
|
import com.bartlomiejpluta.base.engine.error.AppException;
|
||||||
import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration;
|
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.util.res.ResourcesManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset;
|
import com.bartlomiejpluta.base.engine.world.image.asset.ImageAsset;
|
||||||
import com.bartlomiejpluta.base.engine.world.image.model.DefaultImage;
|
import com.bartlomiejpluta.base.engine.world.image.model.DefaultImage;
|
||||||
@@ -23,6 +23,11 @@ import java.util.Map;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class DefaultImageManager implements ImageManager {
|
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 MeshManager meshManager;
|
||||||
private final TextureManager textureManager;
|
private final TextureManager textureManager;
|
||||||
private final ResourcesManager resourcesManager;
|
private final ResourcesManager resourcesManager;
|
||||||
@@ -30,11 +35,6 @@ public class DefaultImageManager implements ImageManager {
|
|||||||
private final Map<String, ByteBuffer> imageBuffers = new HashMap<>();
|
private final Map<String, ByteBuffer> imageBuffers = new HashMap<>();
|
||||||
private final ProjectConfiguration configuration;
|
private final ProjectConfiguration configuration;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
// TODO mesh = meshManager.createQuad(1, 1, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerAsset(ImageAsset asset) {
|
public void registerAsset(ImageAsset asset) {
|
||||||
log.info("Registering [{}] image asset under UID: [{}]", asset.getSource(), asset.getUid());
|
log.info("Registering [{}] image asset under UID: [{}]", asset.getSource(), asset.getUid());
|
||||||
@@ -63,7 +63,7 @@ public class DefaultImageManager implements ImageManager {
|
|||||||
var initialHeight = height / gcd;
|
var initialHeight = height / gcd;
|
||||||
log.info("Creating new image on asset with UID: [{}]", uid);
|
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
|
@Override
|
||||||
|
|||||||
@@ -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.engine.world.image.asset.ImageAsset;
|
||||||
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
||||||
|
|
||||||
public interface ImageManager extends Initializable, AssetManager<ImageAsset, Image>, ByteBufferAssetManager<ImageAsset>, Cleanable {
|
public interface ImageManager extends AssetManager<ImageAsset, Image>, ByteBufferAssetManager<ImageAsset>, Cleanable {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.engine.world.image.model;
|
|||||||
|
|
||||||
import com.bartlomiejpluta.base.api.image.Image;
|
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.material.Material;
|
||||||
|
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadMesh;
|
||||||
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
@@ -16,8 +17,8 @@ public class DefaultImage extends Sprite implements Image {
|
|||||||
private final int width;
|
private final int width;
|
||||||
private final int height;
|
private final int height;
|
||||||
|
|
||||||
public DefaultImage(@NonNull Material texture, int primaryWidth, int primaryHeight, int factor) {
|
public DefaultImage(QuadMesh mesh, @NonNull Material texture, int primaryWidth, int primaryHeight, int factor) {
|
||||||
super(texture);
|
super(mesh, texture);
|
||||||
this.primaryWidth = primaryWidth;
|
this.primaryWidth = primaryWidth;
|
||||||
this.primaryHeight = primaryHeight;
|
this.primaryHeight = primaryHeight;
|
||||||
this.factor = factor;
|
this.factor = factor;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.map.layer.autotile;
|
package com.bartlomiejpluta.base.engine.world.map.layer.autotile;
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
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.core.gl.object.texture.Texture;
|
||||||
import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet;
|
import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
@@ -54,8 +55,8 @@ public class AutoTileLayer2x2 extends BaseAutoTileLayer {
|
|||||||
private final int tileSetColumns;
|
private final int tileSetColumns;
|
||||||
|
|
||||||
|
|
||||||
public AutoTileLayer2x2(@NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) {
|
public AutoTileLayer2x2(MeshManager meshManager, @NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) {
|
||||||
super(map, tileSet, rows, columns, connect, animated, animationDuration);
|
super(meshManager, map, tileSet, rows, columns, connect, animated, animationDuration);
|
||||||
|
|
||||||
this.tileSetColumns = tileSet.getSetsColumns();
|
this.tileSetColumns = tileSet.getSetsColumns();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.layer.autotile.AutoTileLayer;
|
||||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
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.core.gl.object.texture.Texture;
|
||||||
import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet;
|
import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
@@ -62,8 +63,8 @@ public class AutoTileLayer3x2 extends BaseAutoTileLayer implements AutoTileLayer
|
|||||||
|
|
||||||
private final int tileSetColumns;
|
private final int tileSetColumns;
|
||||||
|
|
||||||
public AutoTileLayer3x2(@NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) {
|
public AutoTileLayer3x2(MeshManager meshManager, @NonNull GameMap map, @NonNull AutoTileSet tileSet, int rows, int columns, boolean connect, boolean animated, double animationDuration) {
|
||||||
super(map, tileSet, rows, columns, connect, animated, animationDuration);
|
super(meshManager, map, tileSet, rows, columns, connect, animated, animationDuration);
|
||||||
|
|
||||||
this.tileSetColumns = tileSet.getSetsColumns();
|
this.tileSetColumns = tileSet.getSetsColumns();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
||||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
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.autotile.model.AutoTileSet;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer;
|
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.map.layer.util.ChunkManager;
|
||||||
@@ -27,7 +28,7 @@ public abstract class BaseAutoTileLayer extends BaseLayer {
|
|||||||
private float accumulator = 0f;
|
private float accumulator = 0f;
|
||||||
private boolean dirty = true;
|
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);
|
super(map);
|
||||||
this.layer = new int[rows][columns];
|
this.layer = new int[rows][columns];
|
||||||
this.connect = connect;
|
this.connect = connect;
|
||||||
@@ -36,6 +37,7 @@ public abstract class BaseAutoTileLayer extends BaseLayer {
|
|||||||
this.setsCount = tileSet.getSetsCount();
|
this.setsCount = tileSet.getSetsCount();
|
||||||
|
|
||||||
this.chunkManager = new ChunkManager(
|
this.chunkManager = new ChunkManager(
|
||||||
|
meshManager,
|
||||||
tileSet.getTexture(),
|
tileSet.getTexture(),
|
||||||
rows * 4,
|
rows * 4,
|
||||||
columns * 4,
|
columns * 4,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.bartlomiejpluta.base.api.map.model.GameMap;
|
|||||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
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.color.Color;
|
||||||
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
|
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.map.layer.base.BaseLayer;
|
||||||
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
import com.bartlomiejpluta.base.engine.world.object.Sprite;
|
||||||
import com.bartlomiejpluta.base.internal.object.Placeable;
|
import com.bartlomiejpluta.base.internal.object.Placeable;
|
||||||
@@ -16,6 +16,11 @@ import org.joml.Matrix4fc;
|
|||||||
import org.joml.Vector2fc;
|
import org.joml.Vector2fc;
|
||||||
|
|
||||||
public class DefaultColorLayer extends BaseLayer implements ColorLayer {
|
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 ColorPlane colorPlane;
|
||||||
private final Material material;
|
private final Material material;
|
||||||
|
|
||||||
@@ -145,8 +150,7 @@ public class DefaultColorLayer extends BaseLayer implements ColorLayer {
|
|||||||
|
|
||||||
private static class ColorPlane extends Sprite {
|
private static class ColorPlane extends Sprite {
|
||||||
public ColorPlane(@NonNull MeshManager meshManager, float red, float green, float blue, float alpha) {
|
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(meshManager.createQuad(QUAD_WIDTH, QUAD_HEIGHT, QUAD_ORIGIN_X, QUAD_ORIGIN_Y), new Color(red, green, blue, alpha));
|
||||||
super(new Color(red, green, blue, alpha));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.layer.tile.TileLayer;
|
||||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
||||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
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.base.BaseLayer;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.util.ChunkManager;
|
import com.bartlomiejpluta.base.engine.world.map.layer.util.ChunkManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
||||||
@@ -13,10 +14,10 @@ import lombok.NonNull;
|
|||||||
public class DefaultTileLayer extends BaseLayer implements TileLayer {
|
public class DefaultTileLayer extends BaseLayer implements TileLayer {
|
||||||
private final ChunkManager chunkManager;
|
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);
|
super(map);
|
||||||
|
|
||||||
this.chunkManager = new ChunkManager(tileSet.texture(), rows, columns);
|
this.chunkManager = new ChunkManager(meshManager, tileSet.texture(), rows, columns);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -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.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
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.engine.core.gl.object.texture.Texture;
|
||||||
import com.bartlomiejpluta.base.internal.gc.Disposable;
|
import com.bartlomiejpluta.base.internal.gc.Disposable;
|
||||||
import com.bartlomiejpluta.base.internal.render.Renderable;
|
import com.bartlomiejpluta.base.internal.render.Renderable;
|
||||||
@@ -14,6 +15,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class ChunkManager implements Renderable, Disposable {
|
public class ChunkManager implements Renderable, Disposable {
|
||||||
private static final int DEFAULT_CHUNK_SIZE = 10;
|
private static final int DEFAULT_CHUNK_SIZE = 10;
|
||||||
|
private final MeshManager meshManager;
|
||||||
|
|
||||||
private final Map<Long, TileChunk> chunks = new HashMap<>();
|
private final Map<Long, TileChunk> chunks = new HashMap<>();
|
||||||
private final Map<Long, Map<Integer, Integer>> chunkTileIds = new HashMap<>();
|
private final Map<Long, Map<Integer, Integer>> chunkTileIds = new HashMap<>();
|
||||||
@@ -23,19 +25,20 @@ public class ChunkManager implements Renderable, Disposable {
|
|||||||
private final float tileWidth, tileHeight;
|
private final float tileWidth, tileHeight;
|
||||||
private final int mapRows, mapColumns;
|
private final int mapRows, mapColumns;
|
||||||
|
|
||||||
public ChunkManager(Texture tileSet, int rows, int columns) {
|
public ChunkManager(MeshManager meshManager, Texture tileSet, int rows, int columns) {
|
||||||
this(tileSet, rows, columns, DEFAULT_CHUNK_SIZE);
|
this(meshManager, tileSet, rows, columns, DEFAULT_CHUNK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChunkManager(Texture tileSet, int rows, int columns, Vector2fc tileSize) {
|
public ChunkManager(MeshManager meshManager, Texture tileSet, int rows, int columns, Vector2fc tileSize) {
|
||||||
this(tileSet, rows, columns, tileSize, DEFAULT_CHUNK_SIZE);
|
this(meshManager, tileSet, rows, columns, tileSize, DEFAULT_CHUNK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChunkManager(Texture tileSet, int rows, int columns, int chunkSize) {
|
public ChunkManager(MeshManager meshManager, Texture tileSet, int rows, int columns, int chunkSize) {
|
||||||
this(tileSet, rows, columns, tileSet.getSpriteSize(), 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.tileSet = tileSet;
|
||||||
this.mapRows = rows;
|
this.mapRows = rows;
|
||||||
this.mapColumns = columns;
|
this.mapColumns = columns;
|
||||||
@@ -64,7 +67,7 @@ public class ChunkManager implements Renderable, Disposable {
|
|||||||
int chunkX = (column / chunkSize) * (int) tileWidth * chunkSize;
|
int chunkX = (column / chunkSize) * (int) tileWidth * chunkSize;
|
||||||
int chunkY = (row / chunkSize) * (int) tileHeight * chunkSize;
|
int chunkY = (row / chunkSize) * (int) tileHeight * chunkSize;
|
||||||
|
|
||||||
chunk = new TileChunk(tileSet, chunkSize);
|
chunk = new TileChunk(meshManager, tileSet, chunkSize);
|
||||||
chunk.setPosition(chunkX, chunkY);
|
chunk.setPosition(chunkX, chunkY);
|
||||||
chunks.put(chunkKey, chunk);
|
chunks.put(chunkKey, chunk);
|
||||||
chunkTileIds.put(chunkKey, new HashMap<>());
|
chunkTileIds.put(chunkKey, new HashMap<>());
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.camera.Camera;
|
|||||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
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.material.Material;
|
||||||
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
|
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.mesh.QuadTemplate;
|
||||||
import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture;
|
import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture;
|
||||||
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.Shader;
|
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.BoundingBox;
|
||||||
import com.bartlomiejpluta.base.internal.render.Renderable;
|
import com.bartlomiejpluta.base.internal.render.Renderable;
|
||||||
import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
||||||
|
import lombok.NonNull;
|
||||||
|
|
||||||
public class TileChunk extends Model implements Placeable, Renderable, Disposable, BoundingBox {
|
public class TileChunk extends Model implements Placeable, Renderable, Disposable, BoundingBox {
|
||||||
private final Texture tileSet;
|
private final Texture tileSet;
|
||||||
@@ -23,14 +25,14 @@ public class TileChunk extends Model implements Placeable, Renderable, Disposabl
|
|||||||
private final float originX;
|
private final float originX;
|
||||||
private final float originY;
|
private final float originY;
|
||||||
|
|
||||||
public TileChunk(Texture tileSet, int chunkSize) {
|
public TileChunk(MeshManager meshManager, Texture tileSet, int chunkSize) {
|
||||||
this(tileSet, chunkSize, 0, 0);
|
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.tileSet = tileSet;
|
||||||
this.chunkSize = chunkSize;
|
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.template = new QuadTemplate(tileSet.getSpriteSize().x(), tileSet.getSpriteSize().y(), originX, originY);
|
||||||
this.originX = originX;
|
this.originX = originX;
|
||||||
this.originY = originY;
|
this.originY = originY;
|
||||||
|
|||||||
@@ -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.layer.tile.TileLayer;
|
||||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
||||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
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.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.autotile.model.AutoTileSet;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.autotile.AutoTileLayer2x2;
|
import com.bartlomiejpluta.base.engine.world.map.layer.autotile.AutoTileLayer2x2;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.layer.autotile.AutoTileLayer3x2;
|
import com.bartlomiejpluta.base.engine.world.map.layer.autotile.AutoTileLayer3x2;
|
||||||
@@ -37,6 +36,7 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
||||||
|
private final MeshManager meshManager;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final List<Layer> layers = new ArrayList<>();
|
private final List<Layer> layers = new ArrayList<>();
|
||||||
@@ -65,7 +65,8 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
|||||||
@Getter
|
@Getter
|
||||||
private final Vector3f ambientColor = new Vector3f(1, 1, 1);
|
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.rows = rows;
|
||||||
this.columns = columns;
|
this.columns = columns;
|
||||||
this.stepSize = new Vector2f(tileWidth, tileHeight);
|
this.stepSize = new Vector2f(tileWidth, tileHeight);
|
||||||
@@ -135,21 +136,21 @@ public class DefaultGameMap implements Renderable, Updatable, GameMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public TileLayer createTileLayer(@NonNull TileSet tileSet) {
|
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);
|
layers.add(layer);
|
||||||
|
|
||||||
return layer;
|
return layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AutoTileLayer3x2 createAutoTileLayer3x2(@NonNull AutoTileSet tileSet, boolean animated, double animationDuration, boolean connect) {
|
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);
|
layers.add(layer);
|
||||||
|
|
||||||
return layer;
|
return layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AutoTileLayer2x2 createAutoTileLayer2x2(@NonNull AutoTileSet tileSet, boolean animated, double animationDuration, boolean connect) {
|
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);
|
layers.add(layer);
|
||||||
|
|
||||||
return layer;
|
return layer;
|
||||||
|
|||||||
@@ -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.image.ImageLayerMode;
|
||||||
import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility;
|
import com.bartlomiejpluta.base.api.map.layer.object.PassageAbility;
|
||||||
import com.bartlomiejpluta.base.engine.error.AppException;
|
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.autotile.manager.AutoTileManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager;
|
import com.bartlomiejpluta.base.engine.world.image.manager.ImageManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
|
import com.bartlomiejpluta.base.engine.world.map.model.DefaultGameMap;
|
||||||
@@ -28,7 +28,7 @@ public class ProtobufMapDeserializer extends MapDeserializer {
|
|||||||
@Override
|
@Override
|
||||||
protected DefaultGameMap parse(InputStream input) throws Exception {
|
protected DefaultGameMap parse(InputStream input) throws Exception {
|
||||||
var proto = GameMapProto.GameMap.parseFrom(input);
|
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));
|
proto.getLayersList().forEach(layer -> deserializeLayer(map, layer));
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.move.Movable;
|
|||||||
import com.bartlomiejpluta.base.api.move.Movement;
|
import com.bartlomiejpluta.base.api.move.Movement;
|
||||||
import com.bartlomiejpluta.base.engine.core.engine.DefaultGameEngine;
|
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.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.engine.world.animation.model.AnimatedSprite;
|
||||||
import com.bartlomiejpluta.base.internal.program.Updatable;
|
import com.bartlomiejpluta.base.internal.program.Updatable;
|
||||||
import com.bartlomiejpluta.base.util.math.MathUtil;
|
import com.bartlomiejpluta.base.util.math.MathUtil;
|
||||||
@@ -20,8 +21,8 @@ public abstract class MovableSprite extends AnimatedSprite implements Movable, U
|
|||||||
@Getter
|
@Getter
|
||||||
private Movement movement;
|
private Movement movement;
|
||||||
|
|
||||||
public MovableSprite(Material material) {
|
public MovableSprite(QuadMesh mesh, Material material) {
|
||||||
super(material);
|
super(mesh, material);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,9 +3,7 @@ package com.bartlomiejpluta.base.engine.world.object;
|
|||||||
import com.bartlomiejpluta.base.api.camera.Camera;
|
import com.bartlomiejpluta.base.api.camera.Camera;
|
||||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
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.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.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.core.gl.shader.constant.UniformName;
|
||||||
import com.bartlomiejpluta.base.engine.world.location.LocationableModel;
|
import com.bartlomiejpluta.base.engine.world.location.LocationableModel;
|
||||||
import com.bartlomiejpluta.base.internal.render.BoundingBox;
|
import com.bartlomiejpluta.base.internal.render.BoundingBox;
|
||||||
@@ -21,18 +19,23 @@ public abstract class Sprite extends LocationableModel implements Renderable, Bo
|
|||||||
@Getter
|
@Getter
|
||||||
private Material material;
|
private Material material;
|
||||||
|
|
||||||
private final QuadMesh quad;
|
private final QuadMesh mesh;
|
||||||
private final float width = 1f;
|
private final float width;
|
||||||
private final float height = 1f;
|
private final float height;
|
||||||
private final float originX = .5f;
|
private final float originX;
|
||||||
private final float originY = 1f;
|
private final float originY;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private float[][] textureCoordinates;
|
private float[][] textureCoordinates;
|
||||||
|
|
||||||
public Sprite(Material material) {
|
public Sprite(@NonNull QuadMesh mesh, @NonNull Material material) {
|
||||||
this.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();
|
updateTextureCoordinates();
|
||||||
}
|
}
|
||||||
@@ -51,7 +54,7 @@ public abstract class Sprite extends LocationableModel implements Renderable, Bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setFrame(int id) {
|
public void setFrame(int id) {
|
||||||
quad.setTextureCoordinates(textureCoordinates[id]);
|
mesh.setTextureCoordinates(textureCoordinates[id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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_PROJECTION_MATRIX, camera.getProjectionMatrix());
|
||||||
shaderManager.setUniform(UniformName.UNI_VIEW_MODEL_MATRIX, camera.computeViewModelMatrix(getModelMatrix()));
|
shaderManager.setUniform(UniformName.UNI_VIEW_MODEL_MATRIX, camera.computeViewModelMatrix(getModelMatrix()));
|
||||||
|
|
||||||
quad.render(screen, camera, shaderManager);
|
mesh.render(screen, camera, shaderManager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.core.gl.object.texture.TextureManager;
|
||||||
import com.bartlomiejpluta.base.engine.error.AppException;
|
import com.bartlomiejpluta.base.engine.error.AppException;
|
||||||
import com.bartlomiejpluta.base.engine.project.config.ProjectConfiguration;
|
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.asset.TileSetAsset;
|
||||||
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -19,16 +18,10 @@ import java.util.Map;
|
|||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class DefaultTileSetManager implements TileSetManager {
|
public class DefaultTileSetManager implements TileSetManager {
|
||||||
private final TextureManager textureManager;
|
private final TextureManager textureManager;
|
||||||
private final MeshManager meshManager;
|
|
||||||
private final Map<String, TileSet> tileSets = new HashMap<>();
|
private final Map<String, TileSet> tileSets = new HashMap<>();
|
||||||
private final Map<String, TileSetAsset> assets = new HashMap<>();
|
private final Map<String, TileSetAsset> assets = new HashMap<>();
|
||||||
private final ProjectConfiguration configuration;
|
private final ProjectConfiguration configuration;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
// TODO this.mesh = meshManager.createQuad(1, 1, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerAsset(TileSetAsset asset) {
|
public void registerAsset(TileSetAsset asset) {
|
||||||
log.info("Registering [{}] tile set asset under UID: [{}]", asset.getSource(), asset.getUid());
|
log.info("Registering [{}] tile set asset under UID: [{}]", asset.getSource(), asset.getUid());
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
package com.bartlomiejpluta.base.engine.world.tileset.manager;
|
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.common.manager.AssetManager;
|
||||||
import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset;
|
import com.bartlomiejpluta.base.engine.world.tileset.asset.TileSetAsset;
|
||||||
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
||||||
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
import com.bartlomiejpluta.base.internal.gc.Cleanable;
|
||||||
|
|
||||||
public interface TileSetManager extends Initializable, AssetManager<TileSetAsset, TileSet>, Cleanable {
|
public interface TileSetManager extends AssetManager<TileSetAsset, TileSet>, Cleanable {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user