From c4e3c9623dc96748f7c1d72ad94a945a1b1ed70b Mon Sep 17 00:00:00 2001 From: Antoine Date: Thu, 17 Jun 2021 01:11:35 +0200 Subject: [PATCH] Habillage barre de vie + timer qui fonctionne --- src/engine/camera/Camera.java | 2 +- src/engine/gui/UIElementText.java | 3 ++- src/engine/math/Matrix4f.java | 6 ++---- src/engine/object/ObjectGl.java | 8 -------- src/gameplay/match/match.java | 25 +++++++++++++++++++++---- src/gameplay/match/sprite_zorder.txt | 2 +- textures/health_bar.png | Bin 0 -> 573274 bytes 7 files changed, 27 insertions(+), 19 deletions(-) create mode 100644 textures/health_bar.png diff --git a/src/engine/camera/Camera.java b/src/engine/camera/Camera.java index bffb0ae..3d88496 100644 --- a/src/engine/camera/Camera.java +++ b/src/engine/camera/Camera.java @@ -17,7 +17,7 @@ public class Camera { 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); + ObjectGl.projection = Matrix4f.orthographic(-dimension, dimension, -dimension * ar, dimension * ar, 0.1f, 1000.0f); } public void zoom(float zoomFactor){ diff --git a/src/engine/gui/UIElementText.java b/src/engine/gui/UIElementText.java index 8933df5..f6eb4aa 100644 --- a/src/engine/gui/UIElementText.java +++ b/src/engine/gui/UIElementText.java @@ -93,7 +93,8 @@ public class UIElementText extends UIDummy{ if (background != null){ background.resetTransform(); background.scale(new Vector3f(this.scalingFactor, this.scalingFactor, 1f)); - background.translate(new Vector3f(x, y)); + background.translate(new Vector3f(x, y, this.zPos - 1f)); + background.translate(new Vector3f(- engine.getTransformationView().x, - engine.getTransformationView().y)); } } diff --git a/src/engine/math/Matrix4f.java b/src/engine/math/Matrix4f.java index d3d2388..0a2cb6d 100644 --- a/src/engine/math/Matrix4f.java +++ b/src/engine/math/Matrix4f.java @@ -40,20 +40,18 @@ public class Matrix4f { } public static Matrix4f translate(Vector3f vector){ - Matrix4f result= identity(); + Matrix4f result = identity(); result.elements[0 + 3*4] = vector.x; result.elements[1 + 3*4] = vector.y; result.elements[2 + 3*4] = vector.z; - return result; } public static Matrix4f scale(Vector3f vector){ - Matrix4f result= identity(); + Matrix4f result = identity(); result.elements[0 + 0*4] = vector.x; result.elements[1 + 1*4] = vector.y; result.elements[2 + 2*4] = vector.z; - return result; } diff --git a/src/engine/object/ObjectGl.java b/src/engine/object/ObjectGl.java index c305a3f..2d5fd69 100644 --- a/src/engine/object/ObjectGl.java +++ b/src/engine/object/ObjectGl.java @@ -10,13 +10,6 @@ import static org.lwjgl.glfw.GLFW.glfwGetTime; */ public class ObjectGl { - /** - * STATE CONST DECLARATION - */ - public static final int DEFAULT = 0, STICK_BOTTOM = 1, STICK_TOP = 2; - - private int stick_state; - protected VertexArray vertexArray; protected Shader shader; protected Matrix4f transform; @@ -82,7 +75,6 @@ public class ObjectGl { this.scalingFactor = 1; this.transform = Matrix4f.identity(); this.scale(new Vector3f(size, size,1.0f)); - this.stick_state = DEFAULT; this.useTime = false; // use different shader for each set of option diff --git a/src/gameplay/match/match.java b/src/gameplay/match/match.java index 685a503..9e0e2fe 100644 --- a/src/gameplay/match/match.java +++ b/src/gameplay/match/match.java @@ -185,7 +185,9 @@ public class match { System.out.println("P2 Controller: " + gamepad2.getGamepadName()); } - // GUI setup + /* + GUI Setup + */ coordP1 = new UIElementText("objP1: " + objP1.getXPos() + ":" + objP1.getYPos() + " P1: " + p1.getPosX() +":" + p1.getPosY(), 5f, 0f, 0.2f, 70f, engine); coordP1.setBackground(new Vector3f(0f,0f,0f)); engine.add_uiElement(coordP1); @@ -194,14 +196,26 @@ public class match { engine.add_uiElement(coordP2); // Barre de vie healthBarP1Obj = new HorizontalProgressBar(80f, 8.5f, 0.4f, 100f, p1.getCurrentHP(), p1.getMaxHP(), false); - healthBarP1 = new UIElement(healthBarP1Obj, 0.01f, 0.990f, engine); + healthBarP1 = new UIElement(healthBarP1Obj, 0.0138f, 0.980f, engine); healthBarP2Obj = new HorizontalProgressBar(80f, 8.5f, 0.4f, 100f, p2.getCurrentHP(), p2.getMaxHP(), true); - healthBarP2 = new UIElement(healthBarP2Obj, 0.565f, 0.990f, engine); + healthBarP2 = new UIElement(healthBarP2Obj, 0.563f, 0.980f, engine); engine.add_uiElement(healthBarP1); engine.add_uiElement(healthBarP2); + // Habillage barre de vie + ObjectGl healthBarP1Hab = new ObjectGl(81f, 1f, 1f, 1f, "textures/health_bar.png", null); + healthBarP1Hab.setTextureWrap(0,0, 883, 158); + UIElement healthBarP1HabUI = new UIElement(healthBarP1Hab, 0.005f, 0.995f, engine); + engine.add_uiElement(healthBarP1HabUI); + ObjectGl healthBarP2Hab = new ObjectGl(81f, 1f, 1f, 1f, "textures/health_bar.png", null); + healthBarP2Hab.setTextureWrap(0,0, 883, 158); + healthBarP2Hab.flipTextureWrapH(); + UIElement healthBarP2HabUI = new UIElement(healthBarP2Hab, 0.555f, 0.995f, engine); + engine.add_uiElement(healthBarP2HabUI); // Timer - timerUI = new UIElementText(timer + "", 10f, 0.45f, 1.0f, 85f, engine); + timerUI = new UIElementText(timer + "", 10f, 0.453f, 0.995f, 85f, engine); engine.add_uiElement(timerUI); + //SetTracking + engine.setCameraTrackingSF3ThirdStrike(objP1, objP2); while(frameCount < 5940 && engine.getRunning()) { ac(acCode); @@ -346,7 +360,10 @@ public class match { healthBarP1Obj.setCurrent(p1.getCurrentHP()); healthBarP1Obj.setMax(p1.getMaxHP()); healthBarP2Obj.setCurrent(p2.getCurrentHP()); healthBarP2Obj.setMax(p2.getMaxHP()); timerUI.setText(timer + ""); + // Tracking update + engine.cameraTracking(); + timer = 99 - frameCount/99; timeStamp2 = System.currentTimeMillis(); while(timeStamp2-timeStamp1<(1000/60)) { timeStamp2 = System.currentTimeMillis(); diff --git a/src/gameplay/match/sprite_zorder.txt b/src/gameplay/match/sprite_zorder.txt index 73d255e..cd7affd 100644 --- a/src/gameplay/match/sprite_zorder.txt +++ b/src/gameplay/match/sprite_zorder.txt @@ -7,4 +7,4 @@ 80 - Barre de vie 81 - Habillage barre de vie 85 - Timer -90 + \ No newline at end of file +1000 + \ No newline at end of file diff --git a/textures/health_bar.png b/textures/health_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..5b88a50b5603cf06496725eaae160b3d50d7988c GIT binary patch literal 573274 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�TLhq5+DH*AOR8}0TLjAhy>gw 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 ZmcN?2^k4j~T)pqp_aFG~AN|>r{~uWEXLbMp literal 0 HcmV?d00001