From 7f2bf12afd823d5f514f645e4fa72ae49c2743cc Mon Sep 17 00:00:00 2001 From: Louis MALTERRE <malterre.louis@laposte.net> Date: Mon, 5 Dec 2022 21:20:06 +0100 Subject: [PATCH] normalement les collisions sont debuguees LM --- .../src/main/java/entity/Character.java | 17 ++--- MAVENProject/src/main/java/entity/Entity.java | 35 +++++++-- .../src/main/java/entity/Monster.java | 72 ++++++++++++++++++- .../src/main/java/environnement/HitBox.java | 9 ++- MAVENProject/src/main/java/jeu/Jeu.java | 26 ++----- MAVENProject/src/main/java/jeu/Painter.java | 15 ++-- MAVENProject/src/main/java/map/Obstacle.java | 6 ++ 7 files changed, 128 insertions(+), 52 deletions(-) diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index 2a9bc27..c30a993 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -14,7 +14,7 @@ import environnement.PositionCollision; import jeu.Jeu; import map.Obstacle; -import static environnement.HitBox.collisionObstacle; + import static jeu.Jeu.getObstacleTable; public class Character extends Entity{ @@ -24,7 +24,6 @@ public class Character extends Entity{ private final double impulsionSaut; private double masse; private int clef; - private Map<String,Double> tableCommande; //table des commandes du perso //private BufferedImage sprite; @@ -67,6 +66,9 @@ public class Character extends Entity{ //on actualise les vitesses vitesseActuX = tableCommande.get("CommandX"); + direction = (int) Math.signum(vitesseActuX); + System.out.println(direction); + vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta; } @@ -77,7 +79,7 @@ public class Character extends Entity{ //recupere les collisions for (int i=0;i<listeObstaclesInVoisinage.size();i++) { - collisionsPresentes.put(listeObstaclesInVoisinage.get(i),collisionObstacle(this.getHitBox(), listeObstaclesInVoisinage.get(i).getHitbox(), i)); + collisionsPresentes.put(listeObstaclesInVoisinage.get(i),Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i)); } //on set alpha a 0 (on suppose qu'il est en l'air) @@ -100,7 +102,6 @@ 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){ - System.out.println("coucou"); this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ())); } else if (collisionsPresentes.get(getObstacleTable().get(i)) == GAUCHE && this.vitesseActuX > 0){ @@ -133,13 +134,6 @@ public class Character extends Entity{ } } - public void clef(){ - for (Coffre coffre : Jeu.getCoffreTable()){ - if (HitBox.collision(this.hitBox, coffre.getHitBox()){ - monster.setNbLifePoints(Math.max(monster.getNbLifePoints()-attackStat,0)); - } - } - } public void getGameCommand(){ @@ -153,7 +147,6 @@ public class Character extends Entity{ if ((alpha == 1) && (this.getVitesseActuZ() == 0)){ tableCommande.replace("CommandZ", impulsionSaut); - System.out.println(tableCommande.get("CommandZ")); } } diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java index db7e35d..cf83ac5 100644 --- a/MAVENProject/src/main/java/entity/Entity.java +++ b/MAVENProject/src/main/java/entity/Entity.java @@ -1,10 +1,17 @@ package entity; +import java.util.ArrayList; +import java.util.List; + import environnement.Coordonnees; import environnement.HitBox; +import environnement.PositionCollision; +import static environnement.PositionCollision.NONE; +import map.Obstacle; public abstract class Entity { + protected Coordonnees coord; protected Coordonnees oldCoord; protected final double vitesseMax; @@ -16,9 +23,12 @@ public abstract class Entity { protected final double entityHEIGHT; protected int alpha = 1; // gere les collisions avec le sol protected HitBox voisinage; + protected int direction = 1; // direction selon l'axe des x, -1 pour la gauche et 1 pour la droite + protected List<PositionCollision> obstacleTableCollision = new ArrayList<>(); public Entity(Coordonnees c,double vitesseMax,double width,double height,int atkStt){ + this.coord = c; this.attackStat = atkStt; this.oldCoord = this.coord; @@ -27,10 +37,22 @@ 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); } public void deplacements(){} public void attaque(){} + + public void updateVoisinage(){} + + public void collisionGestion(){} + + public List<Obstacle> obstacleInVoisinage(){return new ArrayList<Obstacle>();} + + public Boolean death(){return false;} public Coordonnees getCoord(){ return this.coord; @@ -84,9 +106,14 @@ public abstract class Entity { return attackStat; } - public void updateVoisinage(){ - + + + public List<PositionCollision> getObstacleTableCollision() { + return obstacleTableCollision; } - - public Boolean death(){return false;} + + public int getDirection() { + return direction; + } + } diff --git a/MAVENProject/src/main/java/entity/Monster.java b/MAVENProject/src/main/java/entity/Monster.java index 8b54a6a..c84f544 100644 --- a/MAVENProject/src/main/java/entity/Monster.java +++ b/MAVENProject/src/main/java/entity/Monster.java @@ -2,13 +2,23 @@ package entity; import environnement.Coordonnees; import environnement.HitBox; +import environnement.Physique; +import environnement.PositionCollision; +import static environnement.PositionCollision.*; +import jeu.Jeu; +import map.Obstacle; + import static jeu.Jeu.getGameCharacter; +import static jeu.Jeu.getObstacleTable; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; public class Monster extends Entity{ - int direction = -1; // direction selon l'axe des x, -1 pour la gauche et 1 pour la droite + + double vitesseActuZ = 0; public Monster(Coordonnees c, double vitesseMax,double width,double height,int atkStt,int nbLP) { super(c, vitesseMax,width,height,atkStt); @@ -28,7 +38,48 @@ public class Monster extends Entity{ //****************** double newX = coord.getX()+direction*vitesseMax*delta; - setCoord(new Coordonnees(newX, coord.getZ())); + double newZ = (1-alpha)*Physique.g/2*delta*delta + this.vitesseActuZ*delta + this.getCoord().getZ(); + setCoord(new Coordonnees(newX, newZ)); + vitesseActuZ = vitesseActuZ + 7*(1-alpha)*Physique.g*delta; + } + + public void collisionGestion(){ + List<Obstacle> listeObstaclesInVoisinage = obstacleInVoisinage(); + //stocke l'obstacle avec lequel il y a eu collision + HashMap<Obstacle,PositionCollision> collisionsPresentes = new HashMap<Obstacle,PositionCollision>(); + + //recupere les collisions + for (int i=0;i<listeObstaclesInVoisinage.size();i++) { + collisionsPresentes.put(listeObstaclesInVoisinage.get(i),Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i)); + } + + //on set alpha a 0 (on le suppose dans les airs) + alpha = 0; + + //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){ + this.vitesseActuZ = 0; + this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2)); + alpha = 1; + break; + } + } + + //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())); + 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())); + this.direction = -1; + break; + } + } } public void attaque(){ @@ -40,7 +91,9 @@ public class Monster extends Entity{ public void evolveMonster(){ //evolution du monstre deplacements(); + collisionGestion(); // ca merde attaque(); + updateVoisinage(); this.setHitBox(new HitBox(this.getCoord(),entityHEIGHT,entityWIDTH)); } @@ -49,6 +102,7 @@ public class Monster extends Entity{ if (!liste.isEmpty()){ for (Monster monster : liste)monster.evolveMonster(); } + //on supprime tous les monstres morts int i = 0; while (i < liste.size()){ if (liste.get(i).death())liste.remove(i); @@ -57,6 +111,20 @@ public class Monster extends Entity{ } + public List<Obstacle> obstacleInVoisinage(){ + List<Obstacle> liste = new ArrayList<>(); + for (Obstacle obs : Jeu.getObstacleTable()){ + if (HitBox.collision(voisinage, obs.getHitbox())){ + liste.add(obs); + } + } + return liste; + } + + public void updateVoisinage(){ + voisinage = new HitBox(coord, 600, 600); + } + public Boolean death(){ return nbLifePoints == 0; } diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java index 0242c1a..8506ef2 100644 --- a/MAVENProject/src/main/java/environnement/HitBox.java +++ b/MAVENProject/src/main/java/environnement/HitBox.java @@ -4,8 +4,7 @@ import java.util.HashMap; import java.util.List; import static environnement.PositionCollision.*; -import static jeu.Jeu.getObstacleTableCollisionCharac; -import static jeu.Jeu.setObstacleTableCollisionCharac; + public class HitBox { @@ -61,8 +60,8 @@ public class HitBox { return extremites; } - public static PositionCollision collisionObstacle(HitBox A, HitBox B,int i) { - List<PositionCollision> L = getObstacleTableCollisionCharac(); + public static PositionCollision collisionObstacle(HitBox A, HitBox B,int i,List<PositionCollision> L) { + boolean a = !(A.getExtremites().get("HautGauche").getX() > B.getExtremites().get("HautDroite").getX()); // A est à droite de B boolean b = !(A.getExtremites().get("HautDroite").getX() < B.getExtremites().get("HautGauche").getX()); // A est à gauche de B boolean c = !(A.getExtremites().get("HautGauche").getZ() > B.getExtremites().get("BasGauche").getZ()); // A est en dessous de B @@ -95,7 +94,7 @@ public class HitBox { if (!d) { L.set(i, BAS); } - setObstacleTableCollisionCharac(L); + } if (somme == 4) { diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java index 7499c22..7098eb2 100644 --- a/MAVENProject/src/main/java/jeu/Jeu.java +++ b/MAVENProject/src/main/java/jeu/Jeu.java @@ -14,13 +14,9 @@ import entity.Monster; import engine.Game; import environnement.Coordonnees; import environnement.HitBox; -import environnement.PositionCollision; import map.Obstacle; -import map.Coffre; import loaders.CharacterLoader; -import static environnement.PositionCollision.*; - public class Jeu implements Game{ @@ -56,9 +52,8 @@ public class Jeu implements Game{ public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),1,1000000)); private static List<Obstacle> obstacleTable = new ArrayList<>(); - private static List<PositionCollision> obstacleTableCollisionCharac= new ArrayList<>(); private static List<Monster> monsterList = new ArrayList<>(); - private static List<Coffre> coffreTable = new ArrayList<>(); + //private static List<Coffre> coffreTable = new ArrayList<>(); @@ -110,14 +105,10 @@ public class Jeu implements Game{ 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))); + //coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30))); - obstacleTableCollisionCharac.add(NONE); - obstacleTableCollisionCharac.add(NONE); - obstacleTableCollisionCharac.add(NONE); - obstacleTableCollisionCharac.add(NONE); - monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-30), 1000, 30, 60, 1,1)); + monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10)); } @@ -206,15 +197,10 @@ public class Jeu implements Game{ public static List<Obstacle> getObstacleTable() { return obstacleTable; } - public static List<Coffre> getCoffreTable() { + /*public static List<Coffre> getCoffreTable() { return coffreTable; - } - public static List<PositionCollision> getObstacleTableCollisionCharac() { - return obstacleTableCollisionCharac; - } - public static void setObstacleTableCollisionCharac(List<PositionCollision> obstacleTableCollisionCharac) { - Jeu.obstacleTableCollisionCharac = obstacleTableCollisionCharac; - } + }*/ + public static Character getGameCharacter() { return gameCharacter; } diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java index 0772b7b..62cf336 100644 --- a/MAVENProject/src/main/java/jeu/Painter.java +++ b/MAVENProject/src/main/java/jeu/Painter.java @@ -6,9 +6,6 @@ import environnement.Coordonnees; import environnement.HitBox; import loaders.ObstacleLoader; import map.Obstacle; -import loaders.CoffreLoader; -import map.Coffre; - import java.awt.*; import java.awt.image.BufferedImage; import java.util.HashMap; @@ -85,7 +82,7 @@ public class Painter implements GamePainter{ crayon.drawLine((int)hg.getX(),(int)hg.getZ(),(int)hd.getX(),(int)hd.getZ()); } - private void drawCoffre(Graphics2D crayon, Coffre coffre){ + /*private void drawCoffre(Graphics2D crayon, Coffre coffre){ HashMap<String, Coordonnees> extremites = coffre.getHitbox().getExtremites(); Coordonnees hd = extremites.get("HautDroite"); Coordonnees bd = extremites.get("BasDroite"); @@ -96,7 +93,7 @@ public class Painter implements GamePainter{ crayon.drawLine((int)bg.getX(),(int)bg.getZ(),(int)hg.getX(),(int)hg.getZ()); crayon.drawLine((int)hg.getX(),(int)hg.getZ(),(int)hd.getX(),(int)hd.getZ()); - } + }*/ private void drawSol(Graphics2D crayon){ ObstacleLoader loader = new ObstacleLoader(Jeu.getSol(),"Terre.png"); @@ -117,7 +114,7 @@ public class Painter implements GamePainter{ } drawObstacle(crayon,obs); } - for (Coffre obs : Jeu.getCoffreTable()){ + /*for (Coffre obs : Jeu.getCoffreTable()){ if (!collision(gameCharacter.getHitBox(), obs.getHitbox())){ crayon.setColor(Color.blue); } @@ -125,7 +122,7 @@ public class Painter implements GamePainter{ crayon.setColor(Color.red); } drawCoffre(crayon,obs); - } + }*/ } private void drawObstacleBis(Graphics2D crayon, Obstacle obstacle, String nom){ @@ -136,13 +133,13 @@ public class Painter implements GamePainter{ crayon.drawImage(loader.getImageObstacle(), x - (int) hitBox.getWidth()/2,z - (int) hitBox.getHeight()/2,null,null); } - private void drawCoffreBis(Graphics2D crayon, Coffre coffre, String nom){ + /*private void drawCoffreBis(Graphics2D crayon, Coffre coffre, String nom){ CoffreLoader loader = new CoffreLoader(coffre,nom); HitBox hitBox = loader.getCoffre().getHitbox(); int z = (int) hitBox.getCentre().getZ(); int x = (int) hitBox.getCentre().getX(); crayon.drawImage(loader.getImageCoffre(), x - (int) hitBox.getWidth()/2,z - (int) hitBox.getHeight()/2,null,null); - } + }*/ private void drawMonsters(Graphics2D crayon){ int x; diff --git a/MAVENProject/src/main/java/map/Obstacle.java b/MAVENProject/src/main/java/map/Obstacle.java index dca88ff..9e80fc3 100644 --- a/MAVENProject/src/main/java/map/Obstacle.java +++ b/MAVENProject/src/main/java/map/Obstacle.java @@ -1,6 +1,8 @@ package map; +import entity.Entity; import environnement.HitBox; +import environnement.PositionCollision; @@ -11,6 +13,10 @@ public class Obstacle { public Obstacle(HitBox h){ this.hitbox = h; } + + public static PositionCollision collision(Entity entity,Obstacle obs,int i){ + return HitBox.collisionObstacle(entity.getHitBox(), obs.getHitbox(), i, entity.getObstacleTableCollision()); + } public HitBox getHitbox() { return hitbox; } -- GitLab