From 62255d2954baea8fdf6bbcd700c05ad5260332b8 Mon Sep 17 00:00:00 2001 From: Louis MALTERRE <malterre.louis@laposte.net> Date: Mon, 5 Dec 2022 23:02:15 +0100 Subject: [PATCH] le systeme dee voisinage n'est tjr pas 100% opti, lorsqu'il est trop petit y' a des pbs dans les collisions ca reste un mystere pour moi atm. Mais sinon la le voisinage est normalement assez grand pour que ca marche. LM --- .../src/main/java/entity/Character.java | 40 ++++++++++++------- MAVENProject/src/main/java/entity/Entity.java | 11 +++-- .../src/main/java/entity/Monster.java | 16 ++++---- MAVENProject/src/main/java/jeu/Jeu.java | 32 +++++++++------ MAVENProject/src/main/java/jeu/Painter.java | 4 ++ 5 files changed, 65 insertions(+), 38 deletions(-) diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index c30a993..38b0e86 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -56,18 +56,18 @@ public class Character extends Entity{ newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ(); - if (newZ+entityHEIGHT/2 >= Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()){ + /*if (newZ+entityHEIGHT/2 >= Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()){ newZ = Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2; //on remet sur le sol alpha = 1; - } + }*/ this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees //on actualise les vitesses vitesseActuX = tableCommande.get("CommandX"); - - direction = (int) Math.signum(vitesseActuX); - System.out.println(direction); + if (vitesseActuX != 0){ + direction = (int) Math.signum(vitesseActuX); + } vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta; } @@ -79,7 +79,9 @@ public class Character extends Entity{ //recupere les collisions for (int i=0;i<listeObstaclesInVoisinage.size();i++) { - collisionsPresentes.put(listeObstaclesInVoisinage.get(i),Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i)); + PositionCollision posCol = Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i); + + collisionsPresentes.put(listeObstaclesInVoisinage.get(i),posCol); } //on set alpha a 0 (on suppose qu'il est en l'air) @@ -91,7 +93,7 @@ public class Character extends Entity{ if (tableCommande.get("CommandZ") != 0){ break; } - if (collisionsPresentes.get(getObstacleTable().get(i)) == BAS){ + if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == BAS){ this.vitesseActuZ = 0; this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2)); alpha = 1; @@ -101,20 +103,27 @@ public class Character extends Entity{ //on gere les collisions laterales et celle du haut for (int i=0;i<collisionsPresentes.size();i++){ - if (collisionsPresentes.get(getObstacleTable().get(i)) == DROITE && this.vitesseActuX < 0){ - this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ())); + + if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == DROITE && this.vitesseActuX < 0){ + this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ())); + break; } - else if (collisionsPresentes.get(getObstacleTable().get(i)) == GAUCHE && this.vitesseActuX > 0){ - this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ())); + else if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == GAUCHE && this.vitesseActuX > 0){ + this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ())); + break; } - else if (collisionsPresentes.get(getObstacleTable().get(i)) == HAUT){ + + } + for (int i=0;i<collisionsPresentes.size();i++){ + if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == HAUT){ this.vitesseActuZ = 0; - this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("BasGauche").getZ()+entityHEIGHT/2+1)); + this.setCoord(new Coordonnees(this.getCoord().getX(), listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("BasGauche").getZ()+entityHEIGHT/2+1)); + break; } } } - public List<Obstacle> obstacleInVoisinage(){ + public List<Obstacle> obstacleInVoisinage(){ //recupere la liste des obstacles presents dans le voisinage List<Obstacle> liste = new ArrayList<>(); for (Obstacle obs : getObstacleTable()){ if (HitBox.collision(voisinage, obs.getHitbox())){ @@ -124,6 +133,7 @@ public class Character extends Entity{ return liste; } + @Override public void attaque(){ for (Monster monster : Jeu.getMonsterList()){ @@ -187,7 +197,7 @@ public class Character extends Entity{ } public void updateVoisinage(){ - voisinage = new HitBox(coord, 600, 600); + voisinage = new HitBox(coord, 1000, 1000); } public Boolean death(){ diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java index cf83ac5..1a14d61 100644 --- a/MAVENProject/src/main/java/entity/Entity.java +++ b/MAVENProject/src/main/java/entity/Entity.java @@ -6,6 +6,7 @@ import java.util.List; import environnement.Coordonnees; import environnement.HitBox; import environnement.PositionCollision; +import static jeu.Jeu.getObstacleTable; import static environnement.PositionCollision.NONE; import map.Obstacle; @@ -37,10 +38,9 @@ public abstract class Entity { this.entityWIDTH = width; this.hitBox = new HitBox(c, entityHEIGHT, entityWIDTH); this.voisinage = new HitBox(c, 600, 600); - obstacleTableCollision.add(NONE); - obstacleTableCollision.add(NONE); - obstacleTableCollision.add(NONE); - obstacleTableCollision.add(NONE); + for (int i = 0;i<getObstacleTable().size();i++){ + obstacleTableCollision.add(NONE); + } } public void deplacements(){} @@ -114,6 +114,9 @@ public abstract class Entity { public int getDirection() { return direction; + } + public HitBox getVoisinage() { + return voisinage; } } diff --git a/MAVENProject/src/main/java/entity/Monster.java b/MAVENProject/src/main/java/entity/Monster.java index c84f544..cfbaa0d 100644 --- a/MAVENProject/src/main/java/entity/Monster.java +++ b/MAVENProject/src/main/java/entity/Monster.java @@ -44,6 +44,7 @@ public class Monster extends Entity{ } public void collisionGestion(){ + //recupere la liste des obstacles dans le voisinage List<Obstacle> listeObstaclesInVoisinage = obstacleInVoisinage(); //stocke l'obstacle avec lequel il y a eu collision HashMap<Obstacle,PositionCollision> collisionsPresentes = new HashMap<Obstacle,PositionCollision>(); @@ -59,9 +60,9 @@ public class Monster extends Entity{ //on parcourt pour tester si il est sur un block for (int i=0;i<collisionsPresentes.size();i++){ //si on trouve on sort de la boucle (pas besoin d'aller plus loin) - if (collisionsPresentes.get(getObstacleTable().get(i)) == BAS){ + if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == BAS){ this.vitesseActuZ = 0; - this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2)); + this.setCoord(new Coordonnees(this.getCoord().getX(), listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2)); alpha = 1; break; } @@ -69,18 +70,19 @@ public class Monster extends Entity{ //on gere les collisions laterales for (int i=0;i<collisionsPresentes.size();i++){ - if (collisionsPresentes.get(getObstacleTable().get(i)) == DROITE && this.direction == -1){ - this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ())); + if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == DROITE && this.direction == -1){ + this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ())); this.direction = 1; break; } - else if (collisionsPresentes.get(getObstacleTable().get(i)) == GAUCHE && this.direction == 1){ - this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ())); + else if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == GAUCHE && this.direction == 1){ + this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ())); this.direction = -1; break; } } } + public void attaque(){ if (HitBox.collision(this.hitBox, getGameCharacter().getHitBox())){ @@ -111,7 +113,7 @@ public class Monster extends Entity{ } - public List<Obstacle> obstacleInVoisinage(){ + public List<Obstacle> obstacleInVoisinage(){ //recupere la liste des obstacles presents dans le voisinage List<Obstacle> liste = new ArrayList<>(); for (Obstacle obs : Jeu.getObstacleTable()){ if (HitBox.collision(voisinage, obs.getHitbox())){ diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java index 7098eb2..fca7b67 100644 --- a/MAVENProject/src/main/java/jeu/Jeu.java +++ b/MAVENProject/src/main/java/jeu/Jeu.java @@ -70,8 +70,7 @@ public class Jeu implements Game{ characterSkinPath = beginPath + movement + numberOfMovement + ".png"; // path premiere frame /*A = new ArrayList<Double>(); n = 0;*/ - gameCharacterLoader = new CharacterLoader(characterSkinPath,new Character(new Coordonnees(300, 300), 2000, 1,600000)); - gameCharacter = gameCharacterLoader.getGameCharacter(); + try { helpReader = new BufferedReader(new FileReader(source)); String line; @@ -90,6 +89,25 @@ public class Jeu implements Game{ directionJeu.put("Jump", false); directionJeu.put("Attack",false); + + + obstacleTable.add(sol); + obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128))); + obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(800, 625),150,50))); + obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(600, 662.5),75,50))); + obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(450, 400),32,128))); + + //coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30))); + + //on met des monstres + monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10)); + monsterList.add(new Monster(new Coordonnees(500, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10)); + monsterList.add(new Monster(new Coordonnees(100, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10)); + + //on charge le perso (a la fin du constructeur, cest important par rapport a obstacleTable, sinon y'a des pbs de "causalite") + gameCharacterLoader = new CharacterLoader(characterSkinPath,new Character(new Coordonnees(300, 300), 2000, 1,600000)); + gameCharacter = new Character(new Coordonnees(300, 300), 2000, 1,600000); + //on remplit la map des frames Map<String,Integer> tempMap = gameCharacterLoader.getPathTable(); @@ -100,16 +118,6 @@ public class Jeu implements Game{ tempMap.put("character_jump",1); gameCharacterLoader.setPathTable(tempMap); - - obstacleTable.add(sol); - obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128))); - obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(800, 625),150,50))); - obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(600, 662.5),75,50))); - //coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30))); - - - monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10)); - } @Override diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java index 62cf336..04558e9 100644 --- a/MAVENProject/src/main/java/jeu/Painter.java +++ b/MAVENProject/src/main/java/jeu/Painter.java @@ -48,6 +48,7 @@ public class Painter implements GamePainter{ int x = (int) gameCharacter.getCoord().getX(); int y = (int) gameCharacter.getCoord().getZ(); crayon.fillRect(x-(int) gameCharacter.getEntityWIDTH()/2,y-(int) gameCharacter.getEntityHEIGHT()/2, (int) gameCharacter.getEntityWIDTH(),(int) gameCharacter.getEntityHEIGHT()); + crayon.drawRect(x-500,y-500, 1000,1000); crayon.drawImage(imageCharac, x-(int) gameCharacter.getEntityWIDTH()/2-10, y- (int) gameCharacter.getEntityHEIGHT()/2-3, null, null); } @@ -76,6 +77,7 @@ public class Painter implements GamePainter{ Coordonnees bd = extremites.get("BasDroite"); Coordonnees hg = extremites.get("HautGauche"); Coordonnees bg = extremites.get("BasGauche"); + if (HitBox.collision(gameCharacter.getVoisinage(), obstacle.getHitbox()))crayon.setColor(Color.green); crayon.drawLine((int)hd.getX(),(int)hd.getZ(),(int)bd.getX(),(int)bd.getZ()); crayon.drawLine((int)bd.getX(),(int)bd.getZ(),(int)bg.getX(),(int)bg.getZ()); crayon.drawLine((int)bg.getX(),(int)bg.getZ(),(int)hg.getX(),(int)hg.getZ()); @@ -147,8 +149,10 @@ public class Painter implements GamePainter{ crayon.setColor(Color.blue); for (Monster monster : getMonsterList()){ crayon.setColor(Color.blue); + x = (int)monster.getCoord().getX(); z = (int)monster.getCoord().getZ(); + crayon.drawRect(x-300, z-300, 600, 600); if (HitBox.collision(gameCharacter.getHitBox(),monster.getHitBox()))crayon.setColor(Color.red); crayon.fillRect(x-(int)monster.getEntityWIDTH()/2, z-(int)monster.getEntityHEIGHT()/2, (int)monster.getEntityWIDTH(), (int)monster.getEntityHEIGHT()); } -- GitLab