diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 2170bc8..9a6d9b7 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -2,8 +2,41 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/com/danitheskunk/skunkworks/BaseGame.java b/com/danitheskunk/skunkworks/BaseGame.java
index 4a6753a..8acae59 100644
--- a/com/danitheskunk/skunkworks/BaseGame.java
+++ b/com/danitheskunk/skunkworks/BaseGame.java
@@ -12,27 +12,28 @@ import com.danitheskunk.skunkworks.gfx.font.IFont;
import com.danitheskunk.skunkworks.nodes.NodeRoot;
import org.lwjgl.glfw.GLFW;
+@SuppressWarnings("SameParameterValue")
public abstract class BaseGame {
- protected AudioEngine audioEngine;
- protected IFont debugFont;
- protected Engine engine;
- protected Mixer mixer;
- protected NodeRoot rootNode;
- protected SamplePlayer samplePlayer;
- protected IWindow window;
+ protected final AudioEngine audioEngine;
+ protected final IFont debugFont;
+ protected final Engine engine;
+ protected final Mixer mixer;
+ protected final NodeRoot rootNode;
+ protected final SamplePlayer samplePlayer;
+ protected final IWindow window;
public BaseGame(Vec2i windowSize, String windowTitle) {
- this.audioEngine = new AudioEngine(44100, 256, 8);
- this.mixer = new Mixer(this.audioEngine, 2);
- this.samplePlayer = new SamplePlayer(this.audioEngine);
+ audioEngine = new AudioEngine(44100, 256, 8);
+ mixer = new Mixer(audioEngine, 2);
+ samplePlayer = new SamplePlayer(audioEngine);
Node.connect(samplePlayer, 0, mixer, 0);
- this.audioEngine.setNode(this.mixer);
+ audioEngine.setNode(mixer);
- this.engine = new Engine();
- this.window = engine.openWindow(windowSize, windowTitle);
+ engine = new Engine();
+ window = engine.openWindow(windowSize, windowTitle);
//todo: load from .jar
- this.debugFont = window.loadFontTileset("fonts/ega-8x14.png");
- this.rootNode = new NodeRoot();
+ debugFont = window.loadFontTileset("fonts/ega-8x14.png");
+ rootNode = new NodeRoot();
init();
}
@@ -63,10 +64,11 @@ public abstract class BaseGame {
}
protected void render3D(IRenderContext3D rc3d) {
+ //to be overriden by child class
}
protected void renderPre(IRenderContext rc) {
-
+ //to be overriden by child class
}
public void run() {
diff --git a/com/danitheskunk/skunkworks/BaseWindow.java b/com/danitheskunk/skunkworks/BaseWindow.java
index cc419ac..072afa9 100644
--- a/com/danitheskunk/skunkworks/BaseWindow.java
+++ b/com/danitheskunk/skunkworks/BaseWindow.java
@@ -12,7 +12,7 @@ abstract public class BaseWindow implements IWindow {
public BaseWindow(Engine engine) {
this.engine = engine;
- this.stretchMode = WindowStretchMode.ASPECT;
+ stretchMode = WindowStretchMode.ASPECT;
}
@Override
@@ -100,7 +100,7 @@ abstract public class BaseWindow implements IWindow {
image.getWidth() - x2,
image.getHeight() - y2
));
- var slice = new NineSlice(loadTexture(tl),
+ return new NineSlice(loadTexture(tl),
loadTexture(tr),
loadTexture(bl),
loadTexture(br),
@@ -110,7 +110,6 @@ abstract public class BaseWindow implements IWindow {
loadTexture(left),
loadTexture(center)
);
- return slice;
}
@Override
@@ -120,7 +119,7 @@ abstract public class BaseWindow implements IWindow {
@Override
public void setStretchMode(WindowStretchMode mode) {
- this.stretchMode = mode;
+ stretchMode = mode;
}
diff --git a/com/danitheskunk/skunkworks/Data.java b/com/danitheskunk/skunkworks/Data.java
index 46baf30..b0f51b5 100644
--- a/com/danitheskunk/skunkworks/Data.java
+++ b/com/danitheskunk/skunkworks/Data.java
@@ -11,7 +11,7 @@ public class Data {
public Data(ByteBuffer data) {
this.data = new LinkedHashMap<>();
- this.currentCategory = "";
+ currentCategory = "";
this.data.put("", new LinkedHashMap<>());
StandardCharsets.UTF_8.decode(data).toString().lines().forEach(this::processLine);
}
diff --git a/com/danitheskunk/skunkworks/Engine.java b/com/danitheskunk/skunkworks/Engine.java
index f1a2ca6..94da2a0 100644
--- a/com/danitheskunk/skunkworks/Engine.java
+++ b/com/danitheskunk/skunkworks/Engine.java
@@ -79,7 +79,8 @@ public class Engine {
WatchKey key;
while((key = watchService.poll()) != null) {
for(var event : key.pollEvents()) {
- var path = ((WatchEvent) event).context();
+ @SuppressWarnings("unchecked") var path =
+ ((WatchEvent) event).context();
if(path.equals(watchPaths.get(key))) {
try {
if(watchCallbacks.get(key).call()) {
diff --git a/com/danitheskunk/skunkworks/Mat4f.java b/com/danitheskunk/skunkworks/Mat4f.java
index a4e21c4..96bd7a9 100644
--- a/com/danitheskunk/skunkworks/Mat4f.java
+++ b/com/danitheskunk/skunkworks/Mat4f.java
@@ -14,35 +14,15 @@ public final class Mat4f {
public static Mat4f perspective(
double fovy, double aspect, double zNear, double zFar
) {
- /*
- T const tanHalfFovy = tan(fovy / static_cast(2));
-
- mat<4, 4, T, defaultp> Result(static_cast(0));
- Result[0][0] = static_cast(1) / (aspect * tanHalfFovy);
- Result[1][1] = static_cast(1) / (tanHalfFovy);
- Result[2][2] = - (zFar + zNear) / (zFar - zNear);
- Result[2][3] = - static_cast(1);
- Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear);
- */
-
- /*
- Result[2][2] = zFar / (zFar - zNear);
- Result[2][3] = static_cast(1);
- Result[3][2] = -(zFar * zNear) / (zFar - zNear);
- */
var mat = new Mat4f();
double tanHalfFovy = Math.tan(fovy / 2.0);
mat.set(0, 0, 1.0 / (aspect * tanHalfFovy));
mat.set(1, 1, 1.0 / tanHalfFovy);
- /*
- mat.set(2, 2, - (zFar + zNear) / (zFar - zNear));
- mat.set(2, 3, -1.0);
- mat.set(3, 2, -(2.0 * zFar * zNear) / (zFar - zNear));
- */
+
mat.set(2, 2, zFar / (zFar - zNear));
mat.set(2, 3, 1.0);
mat.set(3, 2, -(zFar * zNear) / (zFar - zNear));
- //mat.set(3, 3, 0);
+
return mat;
}
diff --git a/com/danitheskunk/skunkworks/Test3D.java b/com/danitheskunk/skunkworks/Test3D.java
index 1c77932..79cd825 100644
--- a/com/danitheskunk/skunkworks/Test3D.java
+++ b/com/danitheskunk/skunkworks/Test3D.java
@@ -9,9 +9,9 @@ import org.lwjgl.assimp.*;
import java.nio.IntBuffer;
+@SuppressWarnings("ALL")
public class Test3D extends BaseGame {
- private Mesh[] meshes;
- private ITexture dtex;
+ private final Mesh[] meshes;
public Test3D() {
super(new Vec2i(1920, 1080), "Skunkworks 3d test");
@@ -25,11 +25,7 @@ public class Test3D extends BaseGame {
//path = "C:\\stream\\models\\Temp Chan 3.glb";
var bytes = engine.loadBytes(path);
var flags = Assimp.aiProcess_Triangulate;
- //flags |= Assimp.aiProcess_FixInfacingNormals;
- //flags |= Assimp.aiProcess_OptimizeGraph;
flags |= Assimp.aiProcess_PreTransformVertices;
- //flags |= Assimp.aiProcess_OptimizeMeshes;
- //flags |= Assimp.aiProcess_Debone;
var ai = Assimp.aiImportFile(path, flags);
if(ai == null) {
throw new RuntimeException("couldn't load model because: " +
@@ -94,9 +90,6 @@ public class Test3D extends BaseGame {
faces += aiMesh.mNumFaces();
}
- dtex = meshes[14].getTexture();
-
-
//window.setDebug(true);
System.out.printf("numMeshes: %d, faces: %d, textures: %d\n",
@@ -121,12 +114,5 @@ public class Test3D extends BaseGame {
rc.renderMesh(meshes[i]);
}
//rc.renderMesh(meshes[14]);
- /*
- rc.renderTriangle(new Vec3f(-10, -10, 1),
- new Vec3f(10, -10, 1),
- new Vec3f(10, 10, 1)
- );
- */
-
}
}
diff --git a/com/danitheskunk/skunkworks/TestNode.java b/com/danitheskunk/skunkworks/TestNode.java
index 8364311..4c55da7 100644
--- a/com/danitheskunk/skunkworks/TestNode.java
+++ b/com/danitheskunk/skunkworks/TestNode.java
@@ -4,8 +4,8 @@ import com.danitheskunk.skunkworks.audio.ISample;
import com.danitheskunk.skunkworks.nodes.NodeSprite;
public class TestNode extends BaseGame {
- ISample kick;
- NodeSprite sprite;
+ private final ISample kick;
+ private final NodeSprite sprite;
public TestNode() {
super(new Vec2i(1280, 720), "Skunkworks");
diff --git a/com/danitheskunk/skunkworks/TestSound.java b/com/danitheskunk/skunkworks/TestSound.java
index 7c9da95..62e53f8 100644
--- a/com/danitheskunk/skunkworks/TestSound.java
+++ b/com/danitheskunk/skunkworks/TestSound.java
@@ -6,6 +6,7 @@ import com.danitheskunk.skunkworks.audio.nodes.Node;
import com.danitheskunk.skunkworks.audio.nodes.SamplePlayer;
import com.danitheskunk.skunkworks.audio.nodes.Sine;
+@SuppressWarnings("ALL")
public class TestSound {
public static void main(String[] args) throws InterruptedException {
var engine = new AudioEngine(44100, 256, 16);
@@ -35,17 +36,5 @@ public class TestSound {
Thread.sleep(20);
}
}
- /*
- for(int i = 0; i < 60; ++i) {
- engine.refill();
- Thread.sleep(20);
- }
-
- for(int i = 0; i < 60; ++i) {
- engine.refill();
- Thread.sleep(20);
- }
-
- */
}
}
diff --git a/com/danitheskunk/skunkworks/audio/AudioEngine.java b/com/danitheskunk/skunkworks/audio/AudioEngine.java
index eebc8ad..67dae41 100644
--- a/com/danitheskunk/skunkworks/audio/AudioEngine.java
+++ b/com/danitheskunk/skunkworks/audio/AudioEngine.java
@@ -18,7 +18,6 @@ import static org.lwjgl.openal.AL10.*;
import static org.lwjgl.openal.ALC10.*;
public class AudioEngine {
- private final int bufferCount;
private final int bufferSize;
private final long context;
private final long device;
@@ -29,7 +28,6 @@ public class AudioEngine {
public AudioEngine(int sampleRate, int bufferSize, int bufferCount) {
this.sampleRate = sampleRate;
this.bufferSize = bufferSize;
- this.bufferCount = bufferCount;
device = alcOpenDevice((ByteBuffer) null);
if(device == 0) {
@@ -43,7 +41,7 @@ public class AudioEngine {
alcMakeContextCurrent(context);
AL.createCapabilities(deviceCaps);
- this.source = alGenSources();
+ source = alGenSources();
for(int i = 0; i < bufferCount; ++i) {
addEmptyBuffer();
@@ -89,7 +87,7 @@ public class AudioEngine {
public ISample loadSample(String path) {
//todo: clean up this code
- FileInputStream file = null;
+ FileInputStream file;
try {
file = new FileInputStream(path);
} catch(FileNotFoundException e) {
diff --git a/com/danitheskunk/skunkworks/audio/nodes/Node.java b/com/danitheskunk/skunkworks/audio/nodes/Node.java
index 100acf9..5959607 100644
--- a/com/danitheskunk/skunkworks/audio/nodes/Node.java
+++ b/com/danitheskunk/skunkworks/audio/nodes/Node.java
@@ -14,9 +14,9 @@ public abstract class Node {
public Node(AudioEngine engine, int inCount, int outCount) {
this.inCount = inCount;
this.outCount = outCount;
- this.isOutConnected = new boolean[outCount];
- this.inConnections = new Node[inCount];
- this.inConnectionSlots = new int[inCount];
+ isOutConnected = new boolean[outCount];
+ inConnections = new Node[inCount];
+ inConnectionSlots = new int[inCount];
this.engine = engine;
if(outCount > 1) {
throw new RuntimeException("more than one out connection not yet" +
diff --git a/com/danitheskunk/skunkworks/backends/gl/Program.java b/com/danitheskunk/skunkworks/backends/gl/Program.java
index 6fae34c..34d8886 100644
--- a/com/danitheskunk/skunkworks/backends/gl/Program.java
+++ b/com/danitheskunk/skunkworks/backends/gl/Program.java
@@ -3,10 +3,9 @@ package com.danitheskunk.skunkworks.backends.gl;
import static org.lwjgl.opengl.GL46.*;
public class Program {
- Shader fragment;
- int program;
- Shader vertex;
-
+ private final Shader fragment;
+ private final int program;
+ private final Shader vertex;
public Program(String vertexSource, String fragmentSource) {
vertex = new Shader(vertexSource, GL_VERTEX_SHADER);
fragment = new Shader(fragmentSource, GL_FRAGMENT_SHADER);
@@ -25,6 +24,10 @@ public class Program {
return fragment;
}
+ public int getProgram() {
+ return program;
+ }
+
public int getUniformLocation(String attrib) {
return glGetUniformLocation(program, attrib);
}
diff --git a/com/danitheskunk/skunkworks/backends/gl/RenderContext.java b/com/danitheskunk/skunkworks/backends/gl/RenderContext.java
index 504957c..1546850 100644
--- a/com/danitheskunk/skunkworks/backends/gl/RenderContext.java
+++ b/com/danitheskunk/skunkworks/backends/gl/RenderContext.java
@@ -7,18 +7,16 @@ import com.danitheskunk.skunkworks.gfx.*;
import static org.lwjgl.opengl.GL46.*;
class RenderContext extends BaseRenderContext implements IRenderContext {
- private final TextureAtlas atlas;
private final int texCoordIndex;
private final int texOffsetIndex;
private final int texSizeIndex;
private final int tintIndex;
public RenderContext(
- Vec2i size, TextureAtlas atlas, int texCoordIndex, int texOffsetIndex,
+ Vec2i size, int texCoordIndex, int texOffsetIndex,
int texSizeIndex, int tintIndex
) {
super(size);
- this.atlas = atlas;
this.texCoordIndex = texCoordIndex;
this.texOffsetIndex = texOffsetIndex;
this.texSizeIndex = texSizeIndex;
@@ -38,7 +36,6 @@ class RenderContext extends BaseRenderContext implements IRenderContext {
slice.getBottom().getSize().getY()
);
var pos = rect.getPos();
- var size = rect.getSize();
drawTexture(pos, slice.getTopLeft());
drawTexture(new Vec2i(pos.getX() +
@@ -148,25 +145,9 @@ class RenderContext extends BaseRenderContext implements IRenderContext {
var bl = rect.getBottomLeft();
var br = rect.getBottomRight();
- /*
- var ttl = Vec2i.divf(tex.getTexArea().getTopLeft(), atlas.getSize
- ());
- var ttr = Vec2i.divf(tex.getTexArea().getTopRight(), atlas.getSize
- ());
- var tbl = Vec2i.divf(tex.getTexArea().getBottomLeft(), atlas.getSize
- ());
- var tbr = Vec2i.divf(tex.getTexArea().getBottomRight(), atlas.getSize
- ());
- */
-
var topleft = tex.getTexArea().getTopLeft();
- //var size = repeat ? tex.getSize() : rect.getSize();
var size = repeat ? tex.getSize() : new Vec2i(100000, 100000);
- /*var ttl = Vec2i.ZERO;
- var ttr = Vec2i.sub(tex.getTexArea().getTopRight(), topleft);
- var tbl = Vec2i.sub(tex.getTexArea().getBottomLeft(), topleft);
- var tbr = Vec2i.sub(tex.getTexArea().getBottomRight(), topleft);
- */
+
var ttl = Vec2i.ZERO;
var ttr = new Vec2i(rect.getWidth(), 0);
var tbl = new Vec2i(0, rect.getHeight());
@@ -184,11 +165,11 @@ class RenderContext extends BaseRenderContext implements IRenderContext {
color.getB() / 255.0f,
color.getA() / 255.0f
);
- //color.getA() / 255.0f);
glUniform2i(texOffsetIndex, topleft.getX(), topleft.getY());
glUniform2i(texSizeIndex, size.getX(), size.getY());
glBegin(GL_TRIANGLES);
+
//counterclockwise triangles
glVertexAttribI2i(texCoordIndex, tbl.getX(), tbl.getY());
glVertex2i(bl.getX(), bl.getY());
diff --git a/com/danitheskunk/skunkworks/backends/gl/RenderContext3D.java b/com/danitheskunk/skunkworks/backends/gl/RenderContext3D.java
index 0974d12..7d1a830 100644
--- a/com/danitheskunk/skunkworks/backends/gl/RenderContext3D.java
+++ b/com/danitheskunk/skunkworks/backends/gl/RenderContext3D.java
@@ -42,21 +42,6 @@ public class RenderContext3D extends BaseRenderContext3D {
assert (t3.getX() >= 0.0 && t3.getX() <= 1.0);
assert (t3.getY() >= 0.0 && t3.getY() <= 1.0);
- /*
- t1 = new Vec2f(t1.getX() * 0.8 + 0.1,
- t1.getY() * 0.8 + 0.1
- );
- t2 = new Vec2f(t2.getX() * 0.8 + 0.1,
- t2.getY() * 0.8 + 0.1
- );
- t3 = new Vec2f(t3.getX() * 0.8 + 0.1,
- t3.getY() * 0.8 + 0.1
- );
-*/
-
- //t1 = new Vec2f(t1.getX(), 1.0 - t1.getY());
- //t2 = new Vec2f(t2.getX(), 1.0 - t2.getY());
- //t3 = new Vec2f(t3.getX(), 1.0 - t3.getY());
t1 = Vec2f.add(texOff, Vec2f.mul(texMult, t1));
t2 = Vec2f.add(texOff, Vec2f.mul(texMult, t2));
t3 = Vec2f.add(texOff, Vec2f.mul(texMult, t3));
@@ -82,12 +67,6 @@ public class RenderContext3D extends BaseRenderContext3D {
glVertex3d(p2.getX(), p2.getY(), p2.getZ());
glVertex3d(p3.getX(), p3.getY(), p3.getZ());
- /*
- glVertex3f((float) p1.getX(), (float) p1.getY(), (float) p1.getZ());
- glVertex3f((float) p2.getX(), (float) p2.getY(), (float) p2.getZ());
- glVertex3f((float) p3.getX(), (float) p3.getY(), (float) p3.getZ());
- */
-
glEnd();
}
diff --git a/com/danitheskunk/skunkworks/backends/gl/Shader.java b/com/danitheskunk/skunkworks/backends/gl/Shader.java
index 2f5d41e..b828d6c 100644
--- a/com/danitheskunk/skunkworks/backends/gl/Shader.java
+++ b/com/danitheskunk/skunkworks/backends/gl/Shader.java
@@ -4,10 +4,8 @@ import static org.lwjgl.opengl.GL46.*;
public class Shader {
private final int shader;
- private final int type;
public Shader(String source, int type) {
- this.type = type;
shader = glCreateShader(type);
glShaderSource(shader, source);
diff --git a/com/danitheskunk/skunkworks/backends/gl/Texture.java b/com/danitheskunk/skunkworks/backends/gl/Texture.java
index 5c0e5d8..dad4ac7 100644
--- a/com/danitheskunk/skunkworks/backends/gl/Texture.java
+++ b/com/danitheskunk/skunkworks/backends/gl/Texture.java
@@ -26,7 +26,7 @@ class Texture implements ITexture {
@Override
public Vec2i getSize() {
- return this.img.getSize();
+ return img.getSize();
}
Recti getTexArea() {
diff --git a/com/danitheskunk/skunkworks/backends/gl/Window.java b/com/danitheskunk/skunkworks/backends/gl/Window.java
index c8d10b4..eadc5d5 100644
--- a/com/danitheskunk/skunkworks/backends/gl/Window.java
+++ b/com/danitheskunk/skunkworks/backends/gl/Window.java
@@ -2,9 +2,9 @@ package com.danitheskunk.skunkworks.backends.gl;
import com.danitheskunk.skunkworks.*;
import com.danitheskunk.skunkworks.gfx.IRenderContext;
-import com.danitheskunk.skunkworks.gfx.threedee.IRenderContext3D;
import com.danitheskunk.skunkworks.gfx.ITexture;
import com.danitheskunk.skunkworks.gfx.Image;
+import com.danitheskunk.skunkworks.gfx.threedee.IRenderContext3D;
import org.lwjgl.glfw.GLFWErrorCallback;
import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GL11;
@@ -99,20 +99,19 @@ public class Window extends BaseWindow {
""";
private final int framebuffer;
private final int framebufferTex;
- private final int framebufferDepthTex;
private final Program program;
private final Program program3D;
private final Program programScaler;
+ private final Mat4f projection;
private final RenderContext renderContext;
private final RenderContext3D renderContext3D;
private final Vec2i size;
+ private final boolean[] stateMouseClicked;
+ private final boolean[] stateMouseDown;
private final TextureAtlas textureAtlas;
private final long window;
private boolean debug;
- private final Mat4f projection;
private boolean shouldClose;
- private final boolean[] stateMouseClicked;
- private final boolean[] stateMouseDown;
private Vec2i windowSize;
public Window(Vec2i size, String title, Engine engine) {
@@ -122,12 +121,12 @@ public class Window extends BaseWindow {
"Unable to initialize GLFW");
glfwDefaultWindowHints();
- this.debug = false;
+ debug = false;
this.size = size;
- this.windowSize = size;
+ windowSize = size;
- this.stateMouseClicked = new boolean[8];
- this.stateMouseDown = new boolean[8];
+ stateMouseClicked = new boolean[8];
+ stateMouseDown = new boolean[8];
window = glfwCreateWindow(size.getX(), size.getY(), title, NULL, NULL);
if(window == NULL) throw new RuntimeException(
@@ -174,7 +173,7 @@ public class Window extends BaseWindow {
0
);
- framebufferDepthTex = glGenTextures();
+ int framebufferDepthTex = glGenTextures();
glBindTexture(GL_TEXTURE_2D, framebufferDepthTex);
glTexImage2D(GL_TEXTURE_2D,
0,
@@ -204,17 +203,18 @@ public class Window extends BaseWindow {
projection = Mat4f.perspective(Math.PI / 2, 16.0 / 9.0, 0.1, 100.0);
renderContext = new RenderContext(size,
- textureAtlas,
program.getAttribLocation("texCoord"),
program.getUniformLocation("texOffset"),
program.getUniformLocation("texSize"),
program.getUniformLocation("tint")
);
- renderContext3D = new RenderContext3D(program.getAttribLocation("texCoord"));
+ renderContext3D = new RenderContext3D(program.getAttribLocation(
+ "texCoord"));
renderContext3D.setTextureAtlas(textureAtlas);
- glProgramUniform2f(program.program,
+ glProgramUniform2f(
+ program.getProgram(),
program.getUniformLocation("windowSize"),
size.getX(),
size.getY()
@@ -235,13 +235,13 @@ public class Window extends BaseWindow {
glfwGetCursorPos(window, x, y);
var mousePos = new Vec2i((int) x[0], (int) y[0]);
- var scaledMousePos = switch(this.stretchMode) {
+ var scaledMousePos = switch(stretchMode) {
case STRETCH -> {
- var stretch = Vec2f.div(this.size, this.windowSize);
+ var stretch = Vec2f.div(size, windowSize);
yield Vec2i.mul(stretch, mousePos);
}
case ASPECT -> {
- var scale = Vec2f.div(this.size, this.windowSize);
+ var scale = Vec2f.div(size, windowSize);
var scalef = Math.max(scale.getX(), scale.getY());
var off = Vec2f.div(Vec2i.sub(windowSize,
@@ -251,7 +251,7 @@ public class Window extends BaseWindow {
yield Vec2i.mul(Vec2i.sub(mousePos, off), 1.0 / scalef);
}
case INTEGER -> {
- var scale = Vec2i.div(this.windowSize, this.size);
+ var scale = Vec2i.div(windowSize, size);
var scalei = Math.max(1, Math.min(scale.getX(), scale.getY()));
var off = Vec2i.div(Vec2i.sub(windowSize,
@@ -268,12 +268,12 @@ public class Window extends BaseWindow {
@Override
public boolean isMouseClicked(int button) {
- return this.stateMouseClicked[button];
+ return stateMouseClicked[button];
}
@Override
public boolean isMouseDown(int button) {
- return this.stateMouseDown[button];
+ return stateMouseDown[button];
}
@Override
@@ -311,17 +311,18 @@ public class Window extends BaseWindow {
return loadTextureArray(img, tileSize);
}
+
private void mouseButtonCallback(
- long window, int button, int action, int mods
+ @SuppressWarnings("unused") long window, int button, int action,
+ @SuppressWarnings(
+ "unused") int mods
) {
switch(action) {
case GLFW_PRESS -> {
- this.stateMouseClicked[button] = true;
- this.stateMouseDown[button] = true;
- }
- case GLFW_RELEASE -> {
- this.stateMouseDown[button] = false;
+ stateMouseClicked[button] = true;
+ stateMouseDown[button] = true;
}
+ case GLFW_RELEASE -> stateMouseDown[button] = false;
}
}
@@ -383,7 +384,8 @@ public class Window extends BaseWindow {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, framebufferTex);
- glProgramUniform2f(programScaler.program,
+ glProgramUniform2f(
+ programScaler.getProgram(),
programScaler.getUniformLocation("windowSize"),
windowSize.getX(),
windowSize.getY()
@@ -394,15 +396,12 @@ public class Window extends BaseWindow {
int tlx2 = 0;
int tly2 = 0;
- switch(this.stretchMode) {
- case STRETCH: {
- tlx1 = 0;
- tly1 = 0;
+ switch(stretchMode) {
+ case STRETCH -> {
tlx2 = windowSize.getX();
tly2 = windowSize.getY();
- break;
}
- case ASPECT: {
+ case ASPECT -> {
float scalex = (float) windowSize.getX() / (float) size.getX();
float scaley = (float) windowSize.getY() / (float) size.getY();
float scale = Math.min(scalex, scaley);
@@ -418,9 +417,8 @@ public class Window extends BaseWindow {
tly1 = yoff;
tlx2 = (int) (xoff + size.getX() * scale);
tly2 = (int) (yoff + size.getY() * scale);
- break;
}
- case INTEGER: {
+ case INTEGER -> {
int scalex = windowSize.getX() / size.getX();
int scaley = windowSize.getY() / size.getY();
int scale = Math.max(1, Math.min(scalex, scaley));
@@ -432,7 +430,6 @@ public class Window extends BaseWindow {
tly1 = yoff;
tlx2 = xoff + size.getX() * scale;
tly2 = yoff + size.getY() * scale;
- break;
}
}
@@ -457,13 +454,12 @@ public class Window extends BaseWindow {
glEnd();
-
glfwSwapBuffers(window);
}
@Override
public void setDebug(boolean on) {
- this.debug = on;
+ debug = on;
}
@Override
@@ -483,11 +479,11 @@ public class Window extends BaseWindow {
glfwPollEvents();
}
- private void windowSizeCallback(long window, int width, int height) {
+ private void windowSizeCallback(
+ @SuppressWarnings("unused") long window, int width, int height
+ ) {
System.out.printf("new window size %d x %d\n", width, height);
windowSize = new Vec2i(width, height);
glViewport(0, 0, width, height);
- //glLoadIdentity();
- //glOrtho(0.0f, width, height, 0.0f, 0.0f, 1.0f);
}
}
diff --git a/com/danitheskunk/skunkworks/gfx/BaseRenderContext.java b/com/danitheskunk/skunkworks/gfx/BaseRenderContext.java
index d257c1a..7aba545 100644
--- a/com/danitheskunk/skunkworks/gfx/BaseRenderContext.java
+++ b/com/danitheskunk/skunkworks/gfx/BaseRenderContext.java
@@ -10,7 +10,7 @@ import java.nio.ByteBuffer;
import java.nio.IntBuffer;
abstract public class BaseRenderContext implements IRenderContext {
- protected Vec2i size;
+ protected final Vec2i size;
protected BaseRenderContext(Vec2i size) {
this.size = size;
diff --git a/com/danitheskunk/skunkworks/gfx/Color.java b/com/danitheskunk/skunkworks/gfx/Color.java
index 913dacc..bf36b2c 100644
--- a/com/danitheskunk/skunkworks/gfx/Color.java
+++ b/com/danitheskunk/skunkworks/gfx/Color.java
@@ -20,7 +20,7 @@ public final class Color {
this.r = r;
this.g = g;
this.b = b;
- this.a = 0xff;
+ a = 0xff;
}
public Color(int r, int g, int b, int a) {
diff --git a/com/danitheskunk/skunkworks/gfx/font/FontTTF.java b/com/danitheskunk/skunkworks/gfx/font/FontTTF.java
index 1924388..c118d3c 100644
--- a/com/danitheskunk/skunkworks/gfx/font/FontTTF.java
+++ b/com/danitheskunk/skunkworks/gfx/font/FontTTF.java
@@ -12,12 +12,11 @@ import java.util.HashMap;
import static org.lwjgl.stb.STBTruetype.*;
public class FontTTF implements IFont {
- HashMap chars;
- STBTTFontinfo info;
- int lineHeight;
- float size;
- float unscaled_size;
- IWindow window;
+ private final HashMap chars;
+ private final STBTTFontinfo info;
+ private final int lineHeight;
+ private final float size;
+ private final IWindow window;
public FontTTF(ByteBuffer buffer, float size, IWindow window) {
int[] ascent = {0};
@@ -25,8 +24,8 @@ public class FontTTF implements IFont {
int[] lineGap = {0};
this.window = window;
- this.chars = new HashMap<>();
- this.info = STBTTFontinfo.create();
+ chars = new HashMap<>();
+ info = STBTTFontinfo.create();
if(!stbtt_InitFont(info, buffer)) {
throw new IllegalStateException(
@@ -35,7 +34,6 @@ public class FontTTF implements IFont {
//todo: save these
stbtt_GetFontVMetrics(info, ascent, descent, lineGap);
lineHeight = lineGap[0];
- this.unscaled_size = size;
this.size = stbtt_ScaleForPixelHeight(info, size);
//precache ascii characters
@@ -127,10 +125,10 @@ public class FontTTF implements IFont {
return false;
}
- private class Char {
- int advance;
- Vec2i off;
- ITexture tex;
+ private static class Char {
+ final int advance;
+ final Vec2i off;
+ final ITexture tex;
Char(ITexture tex, int advance, Vec2i off) {
this.tex = tex;
diff --git a/com/danitheskunk/skunkworks/gfx/font/FontTileset.java b/com/danitheskunk/skunkworks/gfx/font/FontTileset.java
index b19b3c6..407203c 100644
--- a/com/danitheskunk/skunkworks/gfx/font/FontTileset.java
+++ b/com/danitheskunk/skunkworks/gfx/font/FontTileset.java
@@ -11,7 +11,7 @@ public class FontTileset implements IFont {
public FontTileset(List textures) {
this.textures = textures;
- this.charSize = textures.get(0).getSize();
+ charSize = textures.get(0).getSize();
}
@Override
diff --git a/com/danitheskunk/skunkworks/gfx/font/IFont.java b/com/danitheskunk/skunkworks/gfx/font/IFont.java
index 277673c..fa11e00 100644
--- a/com/danitheskunk/skunkworks/gfx/font/IFont.java
+++ b/com/danitheskunk/skunkworks/gfx/font/IFont.java
@@ -16,5 +16,6 @@ public interface IFont {
boolean isCP437();
+ @SuppressWarnings("BooleanMethodIsAlwaysInverted")
boolean isMonospace();
}
diff --git a/com/danitheskunk/skunkworks/gfx/threedee/Mesh.java b/com/danitheskunk/skunkworks/gfx/threedee/Mesh.java
index 8094925..7e557c6 100644
--- a/com/danitheskunk/skunkworks/gfx/threedee/Mesh.java
+++ b/com/danitheskunk/skunkworks/gfx/threedee/Mesh.java
@@ -11,9 +11,9 @@ import java.util.List;
public class Mesh {
private ITexture texture;
- private List triangles;
- private List uv;
- private List vertices;
+ private final List triangles;
+ private final List uv;
+ private final List vertices;
public Mesh() {
vertices = new ArrayList<>();
@@ -24,9 +24,6 @@ public class Mesh {
public static Mesh fromAIMesh(AIMesh aiMesh) {
var mesh = new Mesh();
- var numVertices = aiMesh.mNumVertices();
- var numFaces = aiMesh.mNumFaces();
-
var vertexBuffer = aiMesh.mVertices();
var faceBuffer = aiMesh.mFaces();
var texCoordsBuffer = aiMesh.mTextureCoords(0);
@@ -46,6 +43,7 @@ public class Mesh {
mesh.addTriangle(indices.get(0), indices.get(1), indices.get(2));
}
+ assert(texCoordsBuffer != null);
while(texCoordsBuffer.remaining() > 0) {
var uv = texCoordsBuffer.get();
var x = Math.max(0.0001, Math.min(uv.x(), 0.9999));
diff --git a/com/danitheskunk/skunkworks/gfx/vt/Terminal.java b/com/danitheskunk/skunkworks/gfx/vt/Terminal.java
index 61cd7be..261253f 100644
--- a/com/danitheskunk/skunkworks/gfx/vt/Terminal.java
+++ b/com/danitheskunk/skunkworks/gfx/vt/Terminal.java
@@ -21,7 +21,7 @@ public class Terminal {
private final Vec2i size;
public Terminal(Vec2i size, IFont fullFont, IFont halfFont) {
- this.cells = new ArrayList<>();
+ cells = new ArrayList<>();
this.size = size;
this.fullFont = fullFont;
this.halfFont = halfFont;
@@ -30,8 +30,8 @@ public class Terminal {
throw new RuntimeException("Fonts need to be monospace");
}
- this.fullCharSize = fullFont.getMonospaceSize();
- this.halfCharSize = halfFont.getMonospaceSize();
+ fullCharSize = fullFont.getMonospaceSize();
+ halfCharSize = halfFont.getMonospaceSize();
if(fullCharSize.getY() != halfCharSize.getY() ||
fullCharSize.getX() != halfCharSize.getX() * 2) {
@@ -51,16 +51,16 @@ public class Terminal {
}
public Terminal(Vec2i size, IFont fullFont) {
- this.cells = new ArrayList<>();
+ cells = new ArrayList<>();
this.size = size;
this.fullFont = fullFont;
- this.halfFont = null;
+ halfFont = null;
if(!fullFont.isMonospace()) {
throw new RuntimeException("Fonts need to be monospace");
}
- this.fullCharSize = fullFont.getMonospaceSize();
+ fullCharSize = fullFont.getMonospaceSize();
for(int i = 0; i < size.getY() * size.getX(); ++i) {
var cell = new Cell();
@@ -681,7 +681,7 @@ public class Terminal {
return pos.getX() + pos.getY() * size.getX();
}
- private class Cell {
+ private static class Cell {
Color bgColor;
Color fgColor;
int fullChar;
diff --git a/com/danitheskunk/skunkworks/nodes/Node.java b/com/danitheskunk/skunkworks/nodes/Node.java
index 2bcc89d..5ea0cab 100644
--- a/com/danitheskunk/skunkworks/nodes/Node.java
+++ b/com/danitheskunk/skunkworks/nodes/Node.java
@@ -10,7 +10,7 @@ import java.util.List;
//todo: figure out the whole translation position thingie
public class Node implements Iterable {
- protected List children;
+ protected final List children;
protected Node parent;
protected Vec2f pos;
diff --git a/com/danitheskunk/skunkworks/nodes/NodeRoot.java b/com/danitheskunk/skunkworks/nodes/NodeRoot.java
index 168e231..d40a0a6 100644
--- a/com/danitheskunk/skunkworks/nodes/NodeRoot.java
+++ b/com/danitheskunk/skunkworks/nodes/NodeRoot.java
@@ -1,12 +1,10 @@
package com.danitheskunk.skunkworks.nodes;
-import com.danitheskunk.skunkworks.Timestep;
-
public class NodeRoot extends Node {
private final Tweener tweener;
public NodeRoot() {
- tweener = new Tweener(Timestep.FIXED);
+ tweener = new Tweener();
}
@Override
diff --git a/com/danitheskunk/skunkworks/nodes/Tweener.java b/com/danitheskunk/skunkworks/nodes/Tweener.java
index e202525..cf0d124 100644
--- a/com/danitheskunk/skunkworks/nodes/Tweener.java
+++ b/com/danitheskunk/skunkworks/nodes/Tweener.java
@@ -1,19 +1,15 @@
package com.danitheskunk.skunkworks.nodes;
-import com.danitheskunk.skunkworks.Timestep;
-
import java.util.ArrayList;
import java.util.List;
public class Tweener {
private int currentFrame;
- private final Timestep timestepMode;
private final List tweens;
- public Tweener(Timestep timestepMode) {
- this.timestepMode = timestepMode;
- this.tweens = new ArrayList<>();
- this.currentFrame = 0;
+ public Tweener() {
+ tweens = new ArrayList<>();
+ currentFrame = 0;
}
public void add(BaseTween tween) {
diff --git a/com/danitheskunk/skunkworks/os/windows/Dwm.java b/com/danitheskunk/skunkworks/os/windows/Dwm.java
index f5c5d33..43751cf 100644
--- a/com/danitheskunk/skunkworks/os/windows/Dwm.java
+++ b/com/danitheskunk/skunkworks/os/windows/Dwm.java
@@ -7,6 +7,7 @@ import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinNT;
import com.sun.jna.win32.W32APIOptions;
+@SuppressWarnings("UnusedReturnValue")
public interface Dwm extends Library {
WinDef.DWORD DWMWA_ALLOW_NCPAINT = new WinDef.DWORD(4);
WinDef.DWORD DWMWA_CAPTION_BUTTON_BOUNDS = new WinDef.DWORD(5);
diff --git a/com/danitheskunk/skunkworks/os/windows/TITLEBARINFO.java b/com/danitheskunk/skunkworks/os/windows/TITLEBARINFO.java
index b09120b..85f1be4 100644
--- a/com/danitheskunk/skunkworks/os/windows/TITLEBARINFO.java
+++ b/com/danitheskunk/skunkworks/os/windows/TITLEBARINFO.java
@@ -14,9 +14,9 @@ public class TITLEBARINFO extends Structure {
public static final int RESERVED = 1;
// Index constants
public static final int TITLE_BAR = 0;
- public int cbSize;
+ public final int cbSize;
public WinDef.RECT rcTitleBar;
- public int[] rgstate;
+ public final int[] rgstate;
public TITLEBARINFO() {
rgstate = new int[CCHILDREN_TITLEBAR + 1];
diff --git a/com/danitheskunk/skunkworks/os/windows/User32Extra.java b/com/danitheskunk/skunkworks/os/windows/User32Extra.java
index efb393f..49c0217 100644
--- a/com/danitheskunk/skunkworks/os/windows/User32Extra.java
+++ b/com/danitheskunk/skunkworks/os/windows/User32Extra.java
@@ -53,9 +53,13 @@ public interface User32Extra extends User32 {
int WS_EX_TOPMOST = 0x00000008;
int WS_EX_TRANSPARENT = 0x00000020;
int WS_EX_WINDOWEDGE = 0x00000100;
- long WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE);
+ long WS_EX_OVERLAPPEDWINDOW = (
+ WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE
+ );
long WS_EX_PALETTEWINDOW = (
- WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST
+ WS_EX_WINDOWEDGE |
+ WS_EX_TOOLWINDOW |
+ WS_EX_TOPMOST
);
HCURSOR GetCursor();
@@ -64,6 +68,7 @@ public interface User32Extra extends User32 {
WinDef.HWND GetLastActivePopup(WinDef.HWND hwnd);
// https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-gettitlebarinfo
+ @SuppressWarnings("UnusedReturnValue")
boolean GetTitleBarInfo(WinDef.HWND hwnd, TITLEBARINFO titlebarinfo);
WinDef.HWND GetTopWindow(HWND hWnd);
diff --git a/com/danitheskunk/skunkworks/os/windows/WinUserExtra.java b/com/danitheskunk/skunkworks/os/windows/WinUserExtra.java
index eb52cd7..da4323a 100644
--- a/com/danitheskunk/skunkworks/os/windows/WinUserExtra.java
+++ b/com/danitheskunk/skunkworks/os/windows/WinUserExtra.java
@@ -4,6 +4,7 @@ import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.win32.W32APIOptions;
+@SuppressWarnings("UnusedReturnValue")
public interface WinUserExtra extends WinUser,
com.sun.jna.win32.StdCallLibrary {
WinUserExtra INSTANCE = Native.load("user32",
diff --git a/com/danitheskunk/skunkworks/os/windows/Window.java b/com/danitheskunk/skunkworks/os/windows/Window.java
index 894a010..31e456d 100644
--- a/com/danitheskunk/skunkworks/os/windows/Window.java
+++ b/com/danitheskunk/skunkworks/os/windows/Window.java
@@ -4,7 +4,7 @@ package com.danitheskunk.skunkworks.os.windows;
import com.danitheskunk.skunkworks.Recti;
import com.danitheskunk.skunkworks.Util;
import com.sun.jna.Native;
-import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
import com.sun.jna.platform.win32.*;
import com.sun.jna.ptr.IntByReference;
@@ -23,13 +23,10 @@ public class Window {
var user32 = User32Extra.INSTANCE;
var windows = new ArrayList();
- user32.EnumWindows(new WinUser.WNDENUMPROC() {
- @Override
- public boolean callback(WinDef.HWND hwnd, Pointer pointer) {
- var window = new Window(hwnd);
- if(window.isInAltTabList()) windows.add(window);
- return true;
- }
+ user32.EnumWindows((hwnd, pointer) -> {
+ var window = new Window(hwnd);
+ if(window.isInAltTabList()) windows.add(window);
+ return true;
}, null);
return windows;
@@ -61,31 +58,26 @@ public class Window {
public static void onKey() {
var user32 = User32Extra.INSTANCE;
- var kernel32 = Kernel32.INSTANCE;
var res = user32.SetWindowsHookEx(User32Extra.WH_KEYBOARD_LL,
new WinUser.HOOKPROC() {
public WinDef.LRESULT callback(
int nCode, WinDef.WPARAM wparam, WinDef.LPARAM lparam
) {
+ new WinUser.KBDLLHOOKSTRUCT();
var kb =
- new WinUser.KBDLLHOOKSTRUCT().newInstance(WinUser.KBDLLHOOKSTRUCT.class,
+ Structure.newInstance(WinUser.KBDLLHOOKSTRUCT.class,
lparam.toPointer()
);
System.out.println(kb.vkCode);
switch(wparam.intValue()) {
- case User32Extra.WM_KEYDOWN:
-
- System.out.println("WM_KEYDOWN");
- break;
- case User32Extra.WM_KEYUP:
- System.out.println("WM_KEYUP");
- break;
- case User32Extra.WM_SYSKEYDOWN:
- System.out.println("WM_SYSKEYDOWN");
- break;
- case User32Extra.WM_SYSKEYUP:
- System.out.println("WM_SYSKEYUP");
- break;
+ case User32Extra.WM_KEYDOWN -> System.out.println(
+ "WM_KEYDOWN");
+ case User32Extra.WM_KEYUP -> System.out.println(
+ "WM_KEYUP");
+ case User32Extra.WM_SYSKEYDOWN -> System.out.println(
+ "WM_SYSKEYDOWN");
+ case User32Extra.WM_SYSKEYUP -> System.out.println(
+ "WM_SYSKEYUP");
}
System.out.println("got some message a");
return user32.CallNextHookEx(null, nCode, wparam, lparam);
@@ -108,7 +100,8 @@ public class Window {
var res = user32.SetWindowsHookEx(User32Extra.WH_SHELL,
new WinUser.HOOKPROC() {
public WinDef.LRESULT callback(
- int nCode, WinDef.WPARAM wparam, WinDef.LPARAM lparam
+ int nCode, WinDef.WPARAM ignoredWparam,
+ WinDef.LPARAM ignoredLparam
) {
System.out.println("got some message b");
if(nCode == User32Extra.HSHELL_WINDOWCREATED) {
@@ -226,7 +219,7 @@ public class Window {
if(!(o instanceof Window)) {
return false;
}
- return ((Window) o).hwnd.equals(this.hwnd);
+ return ((Window) o).hwnd.equals(hwnd);
}
public String getClassName() {
@@ -238,7 +231,6 @@ public class Window {
}
public String getExecutableName() {
- var user32 = User32Extra.INSTANCE;
var kernel32 = Kernel32.INSTANCE;
var handle =
kernel32.OpenProcess(WinNT.PROCESS_QUERY_LIMITED_INFORMATION,
@@ -294,7 +286,6 @@ public class Window {
}
public boolean isDwmCloaked() {
- var user32 = User32Extra.INSTANCE;
var dwm = Dwm.INSTANCE;
var out = new IntByReference();
dwm.DwmGetWindowAttribute(hwnd,
@@ -313,7 +304,6 @@ public class Window {
public boolean isInAltTabList() {
var user32 = User32Extra.INSTANCE;
var walk = user32.GetAncestor(hwnd, WinUser.GA_ROOTOWNER);
- WinDef.HWND test;
var window = new Window(hwnd);
if(walk == null) return false;
@@ -362,17 +352,7 @@ public class Window {
rect.top = pos.getY() - top_shadow;
rect.right = pos.getX() + size.getX() + right_shadow;
rect.bottom = pos.getY() + size.getY() + bottom_shaddow;
- //user32.AdjustWindowRect(rect, new WinDef.DWORD(WinUser
- // .WS_OVERLAPPEDWINDOW), new WinDef.BOOL(false));
- //var style = getStyle();
- //var styleex = getStyleEx();
- //style &= ~(User32Extra.WS_CAPTION | User32Extra.WS_MINIMIZEBOX |
- // User32Extra.WS_SYSMENU);
- //styleex &= ~(User32Extra.WS_EX_DLGMODALFRAME | User32Extra
- // .WS_EX_CLIENTEDGE | User32Extra.WS_EX_STATICEDGE);
- //style |= User32Extra.WS_POPUP;
- //user32.AdjustWindowRectEx(rect, new WinDef.DWORD(style), new WinDef
- // .BOOL(false), new WinDef.DWORD(styleex));
+
user32.MoveWindow(hwnd,
rect.left,
rect.top,
@@ -380,8 +360,6 @@ public class Window {
rect.bottom - rect.top,
true
);
- //user32.MoveWindow(hwnd, pos.getX(), pos.getY(), size.getX(), size
- // .getY(), true);
user32.SetWindowPos(hwnd,
null,
@@ -404,12 +382,10 @@ public class Window {
User32Extra.WS_THICKFRAME |
User32Extra.WS_MINIMIZEBOX |
User32Extra.WS_SYSMENU;
- //var STYLES = User32Extra.WS_THICKFRAME | User32Extra.WS_MINIMIZEBOX
- // | User32Extra.WS_SYSMENU;
+
var STYLESEX = User32Extra.WS_EX_DLGMODALFRAME |
User32Extra.WS_EX_CLIENTEDGE |
User32Extra.WS_EX_STATICEDGE;
- //var STYLES = User32Extra.WS_POPUP;
var style = getStyle();
var styleex = getStyleEx();