From a1413544392100108231765870d0178933859cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Mon, 1 Feb 2021 08:53:47 +0100 Subject: [PATCH] Do some little improvements in the code --- .../core/gl/object/material/Material.java | 11 +++++++ .../object/texture/DefaultTextureManager.java | 13 ++++---- .../shader/manager/DefaultShaderManager.java | 1 + .../core/util/mesh/DefaultMeshManager.java | 3 ++ .../world/animation/AnimationableObject.java | 7 ++--- .../core/world/object/RenderableObject.java | 30 +++++++++++++++++++ .../manager/DefaultTileSetManager.java | 24 +++++++++++---- 7 files changed, 74 insertions(+), 15 deletions(-) diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/material/Material.java b/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/material/Material.java index 7631e974..6b21f30d 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/material/Material.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/material/Material.java @@ -17,6 +17,17 @@ public class Material { setColor(r, g, b, alpha); } + public void setAlpha(float alpha) { + this.color.w = alpha; + } + + public void setColor(Vector4f color) { + this.color.x = color.x; + this.color.y = color.y; + this.color.z = color.z; + this.color.w = color.w; + } + public void setColor(float r, float g, float b, float alpha) { color.x = r; color.y = g; diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/texture/DefaultTextureManager.java b/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/texture/DefaultTextureManager.java index 021d3a46..a41bc749 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/texture/DefaultTextureManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/gl/object/texture/DefaultTextureManager.java @@ -2,12 +2,14 @@ package com.bartlomiejpluta.base.core.gl.object.texture; import com.bartlomiejpluta.base.core.util.res.ResourcesManager; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; +@Slf4j @Component @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DefaultTextureManager implements TextureManager { @@ -17,13 +19,14 @@ public class DefaultTextureManager implements TextureManager { @Override public Texture loadTexture(String textureFileName) { var texture = loadedTextures.get(textureFileName); - if(texture != null) { - return texture; + + if (texture == null) { + log.info("Loading [{}] texture to cache", textureFileName); + var buffer = resourcesManager.loadResourceAsByteBuffer(textureFileName); + texture = new Texture(textureFileName, buffer); + loadedTextures.put(textureFileName, texture); } - var buffer = resourcesManager.loadResourceAsByteBuffer(textureFileName); - texture = new Texture(textureFileName, buffer); - loadedTextures.put(textureFileName, texture); return texture; } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/gl/shader/manager/DefaultShaderManager.java b/engine/src/main/java/com/bartlomiejpluta/base/core/gl/shader/manager/DefaultShaderManager.java index 241a2e66..1e5e6bf5 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/gl/shader/manager/DefaultShaderManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/gl/shader/manager/DefaultShaderManager.java @@ -142,6 +142,7 @@ public class DefaultShaderManager implements ShaderManager { @Override public void cleanUp() { + log.info("Cleaning up shaders"); shaders.forEach((name, program) -> program.cleanUp()); } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/util/mesh/DefaultMeshManager.java b/engine/src/main/java/com/bartlomiejpluta/base/core/util/mesh/DefaultMeshManager.java index b404e5bf..6fb61892 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/util/mesh/DefaultMeshManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/util/mesh/DefaultMeshManager.java @@ -2,12 +2,14 @@ package com.bartlomiejpluta.base.core.util.mesh; import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh; import lombok.Data; +import lombok.extern.slf4j.Slf4j; import org.joml.Vector2f; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; +@Slf4j @Component public class DefaultMeshManager implements MeshManager { private final Map quads = new HashMap<>(); @@ -18,6 +20,7 @@ public class DefaultMeshManager implements MeshManager { var mesh = quads.get(dim); if(mesh == null) { + log.info("Creating [w:{}, h:{} | O:{},{}] and putting it into the cache", width, height, originX, originY); mesh = Mesh.quad(width, height, originX, originY); quads.put(dim, mesh); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java index dc377a0b..e5be2feb 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/animation/AnimationableObject.java @@ -13,8 +13,8 @@ public abstract class AnimationableObject extends RenderableObject { super(mesh); this.spriteSheetDimension = spriteSheetDimension; - setMaterial(material); material.setSpriteSize(1 / (float) spriteSheetDimension.y, 1 / (float) spriteSheetDimension.x); + setMaterial(material); } // Returns time in ms between frames @@ -25,8 +25,7 @@ public abstract class AnimationableObject extends RenderableObject { public abstract Vector2f[] getSpriteAnimationFramesPositions(); protected void setAnimationFrame(Vector2f framePosition) { - var material = this.getMaterial(); - var spriteSize = material.getSpriteSize(); - material.setSpritePosition(spriteSize.x * framePosition.x, spriteSize.y * framePosition.y); + var spriteSize = getMaterial().getSpriteSize(); + setSpritePosition(spriteSize.x * framePosition.x, spriteSize.y * framePosition.y); } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java index 892394de..45ac2d66 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/object/RenderableObject.java @@ -8,6 +8,8 @@ import com.bartlomiejpluta.base.core.ui.Window; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; +import org.joml.Vector2f; +import org.joml.Vector4f; @RequiredArgsConstructor public abstract class RenderableObject extends Object implements Renderable { @@ -27,4 +29,32 @@ public abstract class RenderableObject extends Object implements Renderable { public void cleanUp() { mesh.cleanUp(); } + + public void setAlpha(float alpha) { + material.setAlpha(alpha); + } + + public void setColor(Vector4f color) { + material.setColor(color); + } + + public void setColor(float r, float g, float b, float alpha) { + material.setColor(r, g, b, alpha); + } + + public void setSpriteSize(Vector2f spriteSize) { + material.setSpriteSize(spriteSize); + } + + public void setSpriteSize(float w, float h) { + material.setSpriteSize(w, h); + } + + public void setSpritePosition(Vector2f spritePosition) { + material.setSpritePosition(spritePosition); + } + + public void setSpritePosition(float x, float y) { + material.setSpritePosition(x, y); + } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/core/world/tileset/manager/DefaultTileSetManager.java b/engine/src/main/java/com/bartlomiejpluta/base/core/world/tileset/manager/DefaultTileSetManager.java index f72686dc..ce9dfca4 100755 --- a/engine/src/main/java/com/bartlomiejpluta/base/core/world/tileset/manager/DefaultTileSetManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/core/world/tileset/manager/DefaultTileSetManager.java @@ -4,22 +4,34 @@ import com.bartlomiejpluta.base.core.gl.object.texture.TextureManager; import com.bartlomiejpluta.base.core.util.mesh.MeshManager; import com.bartlomiejpluta.base.core.world.tileset.model.TileSet; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.util.HashMap; +import java.util.Map; + +@Slf4j @Component @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class DefaultTileSetManager implements TileSetManager { private final TextureManager textureManager; private final MeshManager meshManager; + private final Map tileSets = new HashMap<>(); @Override public TileSet createTileSet(String tileSetFileName, int rows, int columns) { - var texture = textureManager.loadTexture(tileSetFileName); - var tileWidth = texture.getWidth() / columns; - var tileHeight = texture.getHeight() / rows; - var mesh = meshManager.createQuad(tileWidth, tileHeight, 0, 0); - return new TileSet(mesh, texture, rows, columns, tileWidth, tileHeight); + var tileset = tileSets.get(tileSetFileName); + + if(tileset == null) { + log.info("Loading [{}] tileset to cache", tileSetFileName); + var texture = textureManager.loadTexture(tileSetFileName); + var tileWidth = texture.getWidth() / columns; + var tileHeight = texture.getHeight() / rows; + var mesh = meshManager.createQuad(tileWidth, tileHeight, 0, 0); + tileset = new TileSet(mesh, texture, rows, columns, tileWidth, tileHeight); + } + + return tileset; } }