From c026c1b3aa521e7247b89a7561baf350376f5a17 Mon Sep 17 00:00:00 2001 From: Sebastian Snoer <23051740+Seba244c@users.noreply.github.com> Date: Thu, 22 Feb 2024 19:02:26 +0100 Subject: [PATCH] fix: OSX, No Sound and No Debug Circle (#39) --- demos/tappy/assets/death.ogg | Bin 0 -> 5430 bytes demos/tappy/assets/jump.ogg | Bin 0 -> 4260 bytes demos/tappy/src/main/java/dk/sebsa/Tappy.java | 10 +++- .../sebsa/components/ObstacleComponent.java | 2 + .../dk/sebsa/components/PipesManager.java | 2 +- .../dk/sebsa/components/TappyController.java | 7 ++- .../spellbook/debug/DebugRenderStage.java | 44 +++++++++++------- .../sebsa/spellbook/graphics/opengl/GL2D.java | 4 +- .../imgui/SpellbookImGuiImplGl3.java | 5 -- 9 files changed, 44 insertions(+), 30 deletions(-) create mode 100644 demos/tappy/assets/death.ogg create mode 100644 demos/tappy/assets/jump.ogg diff --git a/demos/tappy/assets/death.ogg b/demos/tappy/assets/death.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9adbb7eb1091f78a55b08b670f0ecd3bbb2d9dc3 GIT binary patch literal 5430 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 literal 0 HcmV?d00001 diff --git a/demos/tappy/assets/jump.ogg b/demos/tappy/assets/jump.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e8dea9898a46201f86d4c549e2490528d11be2ca GIT binary patch literal 4260 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 rects = new HashSet<>(); HashSet points = new HashSet<>(); + HashSet circles = new HashSet<>(); shader.setUniform("mode", DebugRenderMode.ModeWorldCamera.value); shader.setUniform("color", Color.yellow); for (Collider2D collider2D : frameData.newton2DSolids) { - if (collider2D instanceof BoxCollider2D) rects.add(((BoxCollider2D) collider2D).getWorldPositionRect()); - else if (collider2D instanceof CircleCollider2D) { - drawCircle(collider2D.getCenter(), ((CircleCollider2D) collider2D).radius); - } + if (collider2D instanceof BoxCollider2D) + rects.add(((BoxCollider2D) collider2D).getWorldPositionRect()); + if (collider2D instanceof CircleCollider2D) + circles.add(new Circle(collider2D.getCenter(), ((CircleCollider2D) collider2D).radius)); + points.add(collider2D.getCenter()); } drawRectList(rects); + drawCircleList(circles); shader.setUniform("color", Color.red); drawPointList(points); } @@ -163,6 +155,22 @@ private void drawPointList(Set points) { pointsVAO.draw(GL_POINTS); } + private void drawCircleList(Set circles) { + float[] vertices = new float[CIRCLE_DETAIL * 2]; + for(Circle c : circles) { + for (int i = 0; i < CIRCLE_DETAIL; i++) { + float z = (float) i / CIRCLE_DETAIL * 360; + float x = c.radius * (float) Math.cos(Math.toRadians(z)); + float y = c.radius * (float) Math.sin(Math.toRadians(z)); + + vertices[i * 2] = c.pos.x + x; + vertices[i * 2 + 1] = c.pos.y + y; + } + circleVao.put(vertices); + circleVao.draw(GL_LINE_LOOP); + } + } + @Override protected void destroy() { shader.unreference(); @@ -182,4 +190,6 @@ enum DebugRenderMode { } } + + private record Circle(Vector2f pos, float radius) {} } diff --git a/spellbook/src/main/java/dk/sebsa/spellbook/graphics/opengl/GL2D.java b/spellbook/src/main/java/dk/sebsa/spellbook/graphics/opengl/GL2D.java index 59c66d0..b84e05a 100644 --- a/spellbook/src/main/java/dk/sebsa/spellbook/graphics/opengl/GL2D.java +++ b/spellbook/src/main/java/dk/sebsa/spellbook/graphics/opengl/GL2D.java @@ -188,7 +188,6 @@ public static void drawText(String text, Color c, Font font, Rect drawRect) { FloatBuffer y = stack.floats(r.y); // Current y pos STBTTAlignedQuad q = STBTTAlignedQuad.malloc(stack); - float lineY = drawRect.y; for (int i = 0, to = text.length(); i < to; ) { // For all charaters i += Font.getCP(text, to, i, pCodePoint); @@ -196,12 +195,11 @@ public static void drawText(String text, Color c, Font font, Rect drawRect) { // newline and other weird charaters if (cp == '\n') { - y.put(0, lineY = y.get(0) + lineHeight); + y.put(0, y.get(0) + lineHeight); x.put(0, 0.0f); } else if (cp < 32) continue; // Render the charater - float cpX = x.get(0); // Current x pos (before the current char is rendered) stbtt_GetBakedQuad(font.getCdata(), Font.BITMAP_W, Font.BITMAP_H, cp - 32, x, y, q, true); if (font.isKerningEnabled() && i < to) { diff --git a/spellbook/src/main/java/dk/sebsa/spellbook/imgui/SpellbookImGuiImplGl3.java b/spellbook/src/main/java/dk/sebsa/spellbook/imgui/SpellbookImGuiImplGl3.java index 03638a2..d0f7f9d 100644 --- a/spellbook/src/main/java/dk/sebsa/spellbook/imgui/SpellbookImGuiImplGl3.java +++ b/spellbook/src/main/java/dk/sebsa/spellbook/imgui/SpellbookImGuiImplGl3.java @@ -12,11 +12,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.lwjgl.opengl.GL11.*; -import static org.lwjgl.opengl.GL13.*; -import static org.lwjgl.opengl.GL14.*; -import static org.lwjgl.opengl.GL15.*; -import static org.lwjgl.opengl.GL20.*; import static org.lwjgl.opengl.GL30.*; import static org.lwjgl.opengl.GL32.glDrawElementsBaseVertex;