From db073106cda00287683a04cc0d4f5e6c969067e7 Mon Sep 17 00:00:00 2001 From: Antoine Date: Fri, 4 Jun 2021 17:29:17 +0200 Subject: [PATCH] Camera zoom + package gui --- src/engine/Engine.java | 49 ++++++++++++++--------- src/engine/{object => gui}/UIElement.java | 4 +- src/engine/gui/UIElementText.java | 13 ++++++ src/engine/object/Camera.java | 27 +++++++++++++ src/engine/object/Text.java | 1 + 5 files changed, 74 insertions(+), 20 deletions(-) rename src/engine/{object => gui}/UIElement.java (95%) create mode 100644 src/engine/gui/UIElementText.java create mode 100644 src/engine/object/Camera.java diff --git a/src/engine/Engine.java b/src/engine/Engine.java index d22967b..dd141aa 100644 --- a/src/engine/Engine.java +++ b/src/engine/Engine.java @@ -1,5 +1,6 @@ package engine; +import engine.gui.UIElement; import engine.input.*; import engine.math.*; import engine.object.*; @@ -8,7 +9,6 @@ import engine.sound.*; import org.lwjgl.glfw.GLFWFramebufferSizeCallback; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.opengl.GL; -import org.lwjgl.system.CallbackI; import java.util.ArrayList; import java.util.List; @@ -22,6 +22,7 @@ public class Engine { private static long window; private final List objectsGl; + public final List uiElements; private boolean running; @@ -30,6 +31,7 @@ public class Engine { private float viewXPos; public Vector3f transformationView; + private final Camera camera; /** * Create the engine and initial attributes use .init() to start the engine @@ -37,9 +39,10 @@ public class Engine { public Engine(int width, int height, float aspectRatio) { this.running = false; this.objectsGl = new ArrayList<>(); + this.uiElements = new ArrayList<>(); this.width = width; this.height = height; - ObjectGl.projection = Matrix4f.orthographic(-1000, 1000, -1000 * aspectRatio, 1000 * aspectRatio, 0.1f, 100.0f); + this.camera = new Camera(1000, new Vector3f(4.0f, 3.0f), this); ObjectGl.view = Matrix4f.translate(new Vector3f(0.0f, 0.0f, 1.0f)); this.viewXPos = 0.0f; this.transformationView = new Vector3f(); @@ -128,11 +131,15 @@ public class Engine { * @param obj ObjectGl to render */ public void add_objectGl(ObjectGl obj) { - objectsGl.add(obj); + this.objectsGl.add(obj); } public void remove_objectGl(ObjectGl obj) { - objectsGl.remove(obj); + this.objectsGl.remove(obj); + } + + public void add_uiElement(UIElement uiElement) { + this.uiElements.add(uiElement); } public void translateView(Vector3f vec){ @@ -173,6 +180,10 @@ public class Engine { return window; } + public Camera getCamera(){ + return this.camera; + } + public void setWindow(long window) { Engine.window = window; } @@ -237,9 +248,9 @@ public class Engine { texTest.translate(new Vector3f(-1000.0f, (float) (-1000.0f * (3.0 / 4.0f) + 100.0f))); UIElement fpsCounter = new UIElement(texTest.getObj(), engine); + engine.add_uiElement(fpsCounter); // Pour être atteint par les modification du frustum texTest.linkToUIElement(fpsCounter); - long timer = System.currentTimeMillis(); long lastFrame; int frame = 0; @@ -267,21 +278,23 @@ public class Engine { lastFrame = System.currentTimeMillis(); // Game logic should fit here - if (Joystick1Present) { - gamepad1.inputRefresh(); - // Check si le personnage a sauté - if (jump.isButtonPressed()){ - // Le personnage saute - System.out.println(" JE SAUTE "); - } - } + if (Joystick1Present) { + gamepad1.inputRefresh(); + // Check si le personnage a sauté + if (jump.isButtonPressed()){ + // Le personnage saute + System.out.println(" JE SAUTE "); + } + } - KeyboardInput.keyboardInput(zangief, speed); + KeyboardInput.keyboardInput(zangief, speed); - engine.transformationView = new Vector3f((- zangief.getXPos() - engine.viewXPos) - 250.0f,0.0f,0.0f); - engine.translateView(engine.transformationView); + engine.transformationView = new Vector3f((- zangief.getXPos() - engine.viewXPos) - 250.0f,0.0f,0.0f); + engine.translateView(engine.transformationView); - fpsCounter.update(); + fpsCounter.update(); + + engine.camera.zoom(1.001f); /* ******************** @@ -296,7 +309,7 @@ public class Engine { if (System.currentTimeMillis() - timer > 1000) { timer += 1000; System.out.println("FPS: " + frame); - texTest.setNewText("FPS " + frame); + texTest.setNewText("FPS: " + frame); frame = 0; } diff --git a/src/engine/object/UIElement.java b/src/engine/gui/UIElement.java similarity index 95% rename from src/engine/object/UIElement.java rename to src/engine/gui/UIElement.java index 6077b32..70cac61 100644 --- a/src/engine/object/UIElement.java +++ b/src/engine/gui/UIElement.java @@ -1,11 +1,11 @@ -package engine.object; +package engine.gui; import engine.Engine; import engine.math.Vector3f; +import engine.object.ObjectGl; import java.util.ArrayList; import java.util.List; -import java.util.Objects; public class UIElement { diff --git a/src/engine/gui/UIElementText.java b/src/engine/gui/UIElementText.java new file mode 100644 index 0000000..42c7d3d --- /dev/null +++ b/src/engine/gui/UIElementText.java @@ -0,0 +1,13 @@ +package engine.gui; + +import engine.Engine; +import engine.gui.UIElement; +import engine.object.ObjectGl; + +import java.util.List; + +public class UIElementText extends UIElement { + public UIElementText(List objs, Engine engine) { + super(objs, engine); + } +} diff --git a/src/engine/object/Camera.java b/src/engine/object/Camera.java new file mode 100644 index 0000000..c0f4627 --- /dev/null +++ b/src/engine/object/Camera.java @@ -0,0 +1,27 @@ +package engine.object; + +import engine.Engine; +import engine.math.Matrix4f; +import engine.math.Vector3f; + +public class Camera { + + private float dimension; + private final Vector3f aspectRatio; + private final Engine engine; + + + public Camera(float dimension, Vector3f aspectRatio, Engine engine){ + this.dimension = dimension; + this.aspectRatio = aspectRatio; + this.engine = engine; + float ar = aspectRatio.y / aspectRatio.x; + ObjectGl.projection = Matrix4f.orthographic(-dimension, dimension, -dimension * ar, dimension * ar, 0.1f, 100.0f); + } + + public void zoom(float zoomFactor){ + this.dimension *= zoomFactor; + float ar = aspectRatio.y / aspectRatio.x; + ObjectGl.projection = Matrix4f.orthographic(-dimension, dimension, -dimension * ar, dimension * ar, 0.1f, 100.0f); + } +} diff --git a/src/engine/object/Text.java b/src/engine/object/Text.java index abf9c2a..f5e20cb 100644 --- a/src/engine/object/Text.java +++ b/src/engine/object/Text.java @@ -1,6 +1,7 @@ package engine.object; import engine.Engine; +import engine.gui.UIElement; import engine.math.Vector3f; import java.util.ArrayList;