From 1316ee560bfa4380dbf8768a7da353e39e0a999f Mon Sep 17 00:00:00 2001 From: DaniTheSkunk Date: Sun, 18 Sep 2022 03:00:54 +0200 Subject: [PATCH] implemented loadTextureArray (for tilesets) --- Test.java | 7 +++++++ com/danitheskunk/skunkworks/GLWindow.java | 25 +++++++++++++++++++++++ com/danitheskunk/skunkworks/IWindow.java | 4 ++++ 3 files changed, 36 insertions(+) diff --git a/Test.java b/Test.java index 301d950..aa3bb97 100644 --- a/Test.java +++ b/Test.java @@ -1,4 +1,5 @@ import com.danitheskunk.skunkworks.*; +import org.w3c.dom.css.Rect; public class Test { public static void main(String[] args) { @@ -7,6 +8,7 @@ public class Test { var img2 = engine.loadImage("C:\\art\\pixel stuff.png"); var img = engine.loadImage("C:\\Users\\dani\\Videos\\Screenshot 2022-06-25 17-00-59.png"); var tex2 = window.loadTexture("C:\\art\\pixel stuff.png"); + var tileset = window.loadTextureArray("C:\\stream\\coding\\rlc\\tilemap.png", new Vec2i(16, 16)); //img.drawImage(img2, Vec2i.ZERO); var tex = window.loadTexture(img); @@ -25,6 +27,11 @@ public class Test { new Recti(new Vec2i(200, 100), tex2.getSize()), tex2 ); + + renderContext.drawTextureRectangle( + new Recti(new Vec2i(400, 400), new Vec2i(16, 16)), + tileset.get(0x30) + ); window.renderFinish(renderContext); } } diff --git a/com/danitheskunk/skunkworks/GLWindow.java b/com/danitheskunk/skunkworks/GLWindow.java index ea99176..c38ed57 100644 --- a/com/danitheskunk/skunkworks/GLWindow.java +++ b/com/danitheskunk/skunkworks/GLWindow.java @@ -5,6 +5,9 @@ import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GL11; import org.lwjgl.stb.STBRectPack; +import java.util.ArrayList; +import java.util.List; + import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.system.MemoryUtil.NULL; @@ -59,6 +62,28 @@ public class GLWindow implements IWindow { return textureAtlas.addTexture(img); } + @Override + public List loadTextureArray(Image image, Vec2i tileSize) { + var tileCount = Vec2i.div(image.getSize(), tileSize); + var tiles = new ArrayList(); + + for(int y = 0; y < tileCount.getY(); ++y) { + for(int x = 0; x < tileCount.getX(); ++x) { + var rect = new Recti(Vec2i.mul(new Vec2i(x, y), tileSize), tileSize); + var img = image.getSubImage(rect); + tiles.add(loadTexture(img)); + } + } + + return tiles; + } + + @Override + public List loadTextureArray(String path, Vec2i tileSize) { + var img = engine.loadImage(path); + return loadTextureArray(img, tileSize); + } + @Override public void renderFinish(IRenderContext context) { glEnd(); diff --git a/com/danitheskunk/skunkworks/IWindow.java b/com/danitheskunk/skunkworks/IWindow.java index 48eb205..2d473ae 100644 --- a/com/danitheskunk/skunkworks/IWindow.java +++ b/com/danitheskunk/skunkworks/IWindow.java @@ -1,8 +1,12 @@ package com.danitheskunk.skunkworks; +import java.util.List; + public interface IWindow { ITexture loadTexture(Image image); ITexture loadTexture(String path); + List loadTextureArray(Image image, Vec2i tileSize); + List loadTextureArray(String path, Vec2i tileSize); void renderFinish(IRenderContext context); IRenderContext renderStart(); boolean shouldClose();