From 8246803386aa5fdc9309830f17ad01a415d2fc2f Mon Sep 17 00:00:00 2001
From: timeo <timeo.jacquier@gmail.com>
Date: Thu, 9 Dec 2021 09:48:18 +0100
Subject: [PATCH] mort dans l'eau

---
 core/src/body/Water.java                    |  9 ++++++---
 core/src/etat/Play.java                     | 17 +++++++++++++++++
 core/src/handlers/ContactListenerPerso.java | 11 +++++++++++
 3 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/core/src/body/Water.java b/core/src/body/Water.java
index c7fa149..ddd9a8a 100644
--- a/core/src/body/Water.java
+++ b/core/src/body/Water.java
@@ -1,5 +1,7 @@
 package body;
 
+import static handlers.B2DVars.PPM;
+
 import com.badlogic.gdx.math.Vector2;
 import com.badlogic.gdx.physics.box2d.Body;
 import com.badlogic.gdx.physics.box2d.BodyDef;
@@ -12,7 +14,8 @@ public class Water {
     PolygonShape shapeStruct;
     Vector2[] ptsStruct;
 
-    public Water(int x, int y, World world){
+    /*TODO Rajouter des box en dessous pour éviter au perso de se casser la gueule*/
+    public Water(float x, float y, World world){
 
         BodyDef bodyDef = new BodyDef();
         bodyDef.type = BodyDef.BodyType.StaticBody;
@@ -23,14 +26,14 @@ public class Water {
         FixtureDef fixtureDefStruct = new FixtureDef();
         shapeStruct = new PolygonShape();
 
-        ptsStruct = new Vector2[]{};
+        ptsStruct = new Vector2[]{new Vector2(0, 0), new Vector2(10/PPM, 0), new Vector2(10/PPM, 10/PPM), new Vector2(0, 10/PPM)};
         shapeStruct.set(ptsStruct);
 
         fixtureDefStruct.shape = shapeStruct;
         fixtureDefStruct.isSensor = true; //traversable
 
 
-        structBody.createFixture(fixtureDefStruct);
+        structBody.createFixture(fixtureDefStruct).setUserData("eau");
         shapeStruct.dispose();
     }
 }
diff --git a/core/src/etat/Play.java b/core/src/etat/Play.java
index 08734e3..8c4565e 100644
--- a/core/src/etat/Play.java
+++ b/core/src/etat/Play.java
@@ -19,6 +19,7 @@ import com.mygdx.game.PlatVenture;
 import body.Joyau;
 import body.Panneau;
 import body.Platform;
+import body.Water;
 import handlers.ContactListenerPerso;
 import handlers.GameStateManager;
 import handlers.InputPerso;
@@ -98,6 +99,10 @@ public class Play extends GameState {
             }
         }
 
+        if (cl.isTouchWater()){
+            death(dt);
+        }
+
         if (isChangingLevel){
             changeLevel(dt);
         }
@@ -180,6 +185,8 @@ public class Play extends GameState {
                         break;
                     case 'Z':
                         new Panneau((j*10)/PPM, ((hauteur-i) * 10)/PPM, world);
+                    case 'W':
+                        new Water((j*10)/PPM, ((hauteur-i) * 10)/PPM, world);
                 }
             }
 
@@ -234,9 +241,11 @@ public class Play extends GameState {
             if (totalTimeSinceAction > 2){
                 player.setLinearVelocity(0, 0);
                 player.setTransform(15/PPM, 20/PPM, 0);
+                score = 0; // reset du score
                 totalTimeSinceAction = 0;
             } else{
                 totalTimeSinceAction += dt;
+                player.setLinearVelocity(0, 0);
             }
     }
 
@@ -247,13 +256,21 @@ public class Play extends GameState {
 
     private void changeLevel(float dt){
         if (totalTimeSinceAction > 2) {
+            // Destruction de tout les body
             Array<Body> bodies = new Array<>();
             world.getBodies(bodies);
             for (int i = 0; i < bodies.size; i++) {
                 if (!world.isLocked())
                     world.destroyBody(bodies.get(i));
             }
+            level++; // Incrémente le level
+            loadLevel(level);
+            createPlayer();
+            player.setLinearVelocity(0, 0); // annule la vitesse linéaire du personnage
+            System.out.println("changing level");
             isChangingLevel = false;
+
+            totalTimeSinceAction = 0;
         }
         else{
             totalTimeSinceAction += dt;
diff --git a/core/src/handlers/ContactListenerPerso.java b/core/src/handlers/ContactListenerPerso.java
index 3b0a199..bfeed3f 100644
--- a/core/src/handlers/ContactListenerPerso.java
+++ b/core/src/handlers/ContactListenerPerso.java
@@ -14,6 +14,7 @@ public class ContactListenerPerso implements ContactListener {
     Array<Body> bodyToRemove = new Array<Body>();
     private int score = 0;
     private boolean triggerEndLevel = false;
+    private boolean touchWater = false;
 
     /**
      * Appeler quand 2 fixtures rentre en collision
@@ -42,6 +43,12 @@ public class ContactListenerPerso implements ContactListener {
             }
         }
 
+        if (fa.getUserData() != null && fa.getUserData().equals("eau")){
+            touchWater = true;
+        }else{
+            touchWater = false;
+        }
+
     }
 
     /**
@@ -100,4 +107,8 @@ public class ContactListenerPerso implements ContactListener {
     public boolean isTriggerEndLevel() {
         return triggerEndLevel;
     }
+
+    public boolean isTouchWater() {
+        return touchWater;
+    }
 }
-- 
GitLab