From 8e276981f13b9d11b44eee55c5bab771d6b645bd Mon Sep 17 00:00:00 2001 From: Louis MALTERRE <malterre.louis@laposte.net> Date: Tue, 29 Nov 2022 11:58:58 +0100 Subject: [PATCH] collisions sur le cote marchent encore pas --- .../src/main/java/entity/Character.java | 31 ++++++++++++++----- MAVENProject/src/main/java/entity/Entity.java | 8 ++++- .../src/main/java/environnement/HitBox.java | 2 +- MAVENProject/src/main/java/map/Obstacle.java | 12 +++++-- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index 0c7bec7..6d9d7a3 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -16,7 +16,7 @@ public class Character extends Entity{ private final double impulsionSaut; private double masse; private int alpha = 1; // gere les collisions avec le sol - + private int beta = 1; // gere les collisions avec les murs private final double entityWIDTH = 30; // pour l'instant je les ai renommes, ca peut changer private final double entityHEIGHT = 60; private Map<String,Double> tableCommande; //table des commandes du perso @@ -46,7 +46,8 @@ public class Character extends Entity{ //on se souvient de ses anciennes positions this.oldCoord = this.getCoord(); - newX = tableCommande.get("CommandX")*delta + this.getCoord().getX(); + newX = beta*tableCommande.get("CommandX")*delta + this.getCoord().getX(); + //if (newX + Math.signum(tableCommande.get("CommandX")*entityWIDTH/2 )) newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ(); @@ -58,14 +59,14 @@ public class Character extends Entity{ //(tableCommande.get("CommandZ") == 0) this.getCoord().getZ()(tableCommande.get("CommandZ") == 0) && this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees - System.out.println("z = "+this.getCoord().getZ()); + //on actualise les vitesses - vitesseActuX = tableCommande.get("CommandX"); + vitesseActuX = beta*tableCommande.get("CommandX"); if (alpha == 1) vitesseActuZ = 0; /*else*/ vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta; - System.out.println("vitesse z = "+vitesseActuZ); + @@ -110,8 +111,24 @@ public class Character extends Entity{ public void checkIfNextToWall(){ if ((Obstacle.collisionDroite(this, Jeu.getObstacleTable()) && tableCommande.get("CommandX") == -vitesseMax) || (Obstacle.collisionGauche(this, Jeu.getObstacleTable()) && tableCommande.get("CommandX") == vitesseMax)){ - this.setCoord(new Coordonnees(this.oldCoord.getX(), this.getCoord().getZ())); + beta = 0; + }else { + beta = 1; + } + if (obstacleNextTo != null){ + if (tableCommande.get("CommandX") > 0){ + if (this.getCoord().getX()+entityWIDTH/2 >= obstacleNextTo.getHitbox().getExtremites().get("HautGauche").getX()){ + this.setCoord(new Coordonnees(obstacleNextTo.getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ())); + } + } + else if (tableCommande.get("CommandX") < 0){ + if (this.getCoord().getX()-entityWIDTH/2 <= obstacleNextTo.getHitbox().getExtremites().get("HautDroite").getX()){ + this.setCoord(new Coordonnees(obstacleNextTo.getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ())); + } + } } + + } public void resetCommand(){ @@ -121,7 +138,7 @@ public class Character extends Entity{ } public void evolveCharacter(){ - System.out.println(alpha); + System.out.println(beta); getGameCommand(); checkIfOnGround(); //checkIfNextToWall(); diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java index 4efaaa3..1b302ba 100644 --- a/MAVENProject/src/main/java/entity/Entity.java +++ b/MAVENProject/src/main/java/entity/Entity.java @@ -10,7 +10,7 @@ public abstract class Entity { protected Coordonnees oldCoord; final double vitesseMax; protected HitBox hitBox; - + protected Obstacle obstacleNextTo = null; private final double entityWIDTH = 10; private final double entityHEIGHT = 10; @@ -50,6 +50,12 @@ public abstract class Entity { public void setObstacleBeneath(Obstacle obstacleBeneath) { this.obstacleBeneath = obstacleBeneath; } + public Obstacle getObstacleNextTo() { + return obstacleNextTo; + } + public void setObstacleNextTo(Obstacle obstacleNextTo) { + this.obstacleNextTo = obstacleNextTo; + } } diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java index 74aa6ca..cd30ac7 100644 --- a/MAVENProject/src/main/java/environnement/HitBox.java +++ b/MAVENProject/src/main/java/environnement/HitBox.java @@ -63,7 +63,7 @@ public class HitBox { return !(A.extremites.get("HautDroite").getX() < B.extremites.get("HautGauche").getX());// A est à gauche de B } public static Boolean collisionBas(HitBox A, HitBox B){ - System.out.println(A.extremites.get("HautGauche").getZ()+" "+B.extremites.get("BasGauche").getZ()); + //System.out.println(A.extremites.get("HautGauche").getZ()+" "+B.extremites.get("BasGauche").getZ()); return !(A.extremites.get("HautGauche").getZ() > B.extremites.get("BasGauche").getZ());// A est en dessous de B } public static Boolean collisionHaut(HitBox A, HitBox B){ diff --git a/MAVENProject/src/main/java/map/Obstacle.java b/MAVENProject/src/main/java/map/Obstacle.java index acd13a7..8cc4e20 100644 --- a/MAVENProject/src/main/java/map/Obstacle.java +++ b/MAVENProject/src/main/java/map/Obstacle.java @@ -53,17 +53,25 @@ public class Obstacle { public static Boolean collisionGauche(Entity charac,List<Obstacle> list){ for (Obstacle obs : list){ - if (HitBox.collisionGauche(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())) return true; + if (HitBox.collisionGauche(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())){ + charac.setObstacleNextTo(obs); + return true; + } } + charac.setObstacleNextTo(null); return false; } public static Boolean collisionDroite(Entity charac,List<Obstacle> list){ for (Obstacle obs : list){ - if (HitBox.collisionDroite(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())) return true; + if (HitBox.collisionDroite(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())) { + charac.setObstacleNextTo(obs); + return true; + } } + charac.setObstacleNextTo(null); return false; } } -- GitLab