diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index 79ad89d748dd9cb7d3ab70382ba454f29717d237..b187b4a00d3e835afd990913f520e7ca27a7822d 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -26,6 +26,8 @@ public class Character extends Entity{ private int clef; private Map<String,Double> tableCommande; //table des commandes du perso + private Obstacle obstacleBeneath = Jeu.sol; + //private BufferedImage sprite; public Character(Coordonnees c, double vitesseMax, double m, double impSaut){ @@ -66,7 +68,7 @@ public class Character extends Entity{ } public void collisionGestion(){ - List<Obstacle> listeObstaclesInVoisinage = obstacleInVoisinage(); + List<Obstacle> listeObstaclesInVoisinage = getObstacleTable(); //stocke l'obstacle avec lequel il y a eu collision HashMap<Obstacle,PositionCollision> collisionsPresentes = new HashMap<Obstacle,PositionCollision>(); @@ -79,30 +81,39 @@ public class Character extends Entity{ //on set alpha a 0 (on suppose qu'il est en l'air) alpha = 0; + if (this.hitBox.getExtremites().get("BasDroite").getZ()+entityHEIGHT/2-obstacleBeneath.getHitbox().getExtremites().get("HautDroite").getZ()>-1 && this.coord.getX()>=obstacleBeneath.getHitbox().getExtremites().get("BasGauche").getX() && this.coord.getX()<=obstacleBeneath.getHitbox().getExtremites().get("BasDroite").getX()) { - //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), on n'étudie qui si on ne donne pas de commande - if (tableCommande.get("CommandZ") != 0){ - break; - } - 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; - break; + alpha = 1; + } + else { + obstacleBeneath=Jeu.sol; + //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), on n'étudie qui si on ne donne pas de commande + if (tableCommande.get("CommandZ") != 0){ + break; + } + 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-1)); + obstacleBeneath=listeObstaclesInVoisinage.get(i); + alpha = 1; + break; + } } + + } //on gere les collisions laterales et celle du haut for (int i=0;i<collisionsPresentes.size();i++){ 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())); + this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2+1, this.getCoord().getZ())); break; } 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())); + this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2-1, this.getCoord().getZ())); break; } @@ -168,7 +179,8 @@ public class Character extends Entity{ getGameCommand(); deplacements(); collisionGestion(); - updateVoisinage(); + System.out.println(obstacleBeneath); + //updateVoisinage(); this.setHitBox(new HitBox(this.getCoord(),entityHEIGHT,entityWIDTH)); // mise à jour moins crade pour l'instant if (tableCommande.get("CommandAttack") == 1) attaque(); updateNbFrameInvincible(); @@ -176,6 +188,10 @@ public class Character extends Entity{ } + public Obstacle getObstacleBeneath() { + return obstacleBeneath; + } + private void updateNbFrameInvincible(){ nbFramesInvincible = Math.max(0, nbFramesInvincible-1); } diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java index c7818d8988f6fb13a57321fc855a44ff8119d95f..e23ec07f974f02c75c5c50751c166c391d21d4eb 100644 --- a/MAVENProject/src/main/java/jeu/Jeu.java +++ b/MAVENProject/src/main/java/jeu/Jeu.java @@ -32,7 +32,7 @@ public class Jeu implements Game{ //Coordonees de debut du personnage static final double zdebut = 0; - static final double xdebut = 300; + static final double xdebut = 200; //perso static Character gameCharacter; @@ -60,7 +60,7 @@ public class Jeu implements Game{ private boolean characterAttacking = false; //boolean necessaire pour rendre l'animation d'attaque prioritaire - public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),1,1000000)); + public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),56,1000000)); public static List<Obstacle> obstacleTable = new ArrayList<>(); private static List<Monster> monsterList = new ArrayList<>(); @@ -68,10 +68,11 @@ public class Jeu implements Game{ //private static List<Coffre> coffreTable = new ArrayList<>(); public final static int TILES_DEFAULT_SIZE=32; - public final static float SCALE=1.5f; + public final static float SCALE=1.75f; public final static int TILES_IN_WIDTH = 60; public final static int TILES_IN_HEIGHT = 20; public final static int TILES_SIZE = (int) (TILES_DEFAULT_SIZE*SCALE); + LevelManager levelManager; public Jeu(String source) { @@ -87,7 +88,7 @@ public class Jeu implements Game{ /*A = new ArrayList<Double>(); n = 0;*/ - + LevelManager levelManager = new LevelManager(); @@ -111,12 +112,16 @@ public class Jeu implements Game{ //faut supp la pour table obstacles + + obstacleTable= levelManager.generateObstacleTable(); obstacleTable.add(sol); - obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128))); + + + /*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))); + obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(450, 400),32,128)));*/ //coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30))); //table des coffres @@ -189,7 +194,8 @@ public class Jeu implements Game{ } if (!characterAttacking){ //animation d'attaque prioritaire - if (gameCharacter.getAlpha() == 0) movement = "character_jump"; // pour savoir si il jump ou non + if ( gameCharacter.getAlpha()==0 || gameCharacter.getHitBox().getExtremites().get("BasDroite").getZ()+gameCharacter.getEntityHEIGHT()/2-gameCharacter.getObstacleBeneath().getHitbox().getExtremites().get("HautDroite").getZ()<-1) { + movement = "character_jump";} // pour savoir si il jump ou non else{ if (Right && Left)movement = "character_idle"; else if (Right || Left){ diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java index 72cb3914397f813e734fc9274bf0847542acecee..a0e0bbd6af7974b478fd2b95d9a4d4cf271a6692 100644 --- a/MAVENProject/src/main/java/jeu/Painter.java +++ b/MAVENProject/src/main/java/jeu/Painter.java @@ -36,7 +36,7 @@ public class Painter implements GamePainter{ private Painter painter; public Painter() { - levelManager = new LevelManager(painter); + } @Override @@ -48,12 +48,9 @@ public class Painter implements GamePainter{ Graphics2D crayon = (Graphics2D) im.getGraphics(); crayon.setColor(Color.blue); - - levelManager.draw(); drawMap(crayon); - drawSol(crayon); - drawObstacleBis(crayon,test,"plateforme.png"); // A changer + //drawObstacleBis(crayon,test,"plateforme.png"); // A changer drawLifePoints(crayon); drawMonsters(crayon); drawKunais(crayon); diff --git a/MAVENProject/src/main/java/map/LevelManager.java b/MAVENProject/src/main/java/map/LevelManager.java index 677b0e3baa520a606e6da66f6f208be561225783..f602c207475c82f167e095da6764a9796d5bd36d 100644 --- a/MAVENProject/src/main/java/map/LevelManager.java +++ b/MAVENProject/src/main/java/map/LevelManager.java @@ -2,6 +2,8 @@ package map; import java.awt.Graphics; import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; import environnement.Coordonnees; import environnement.HitBox; @@ -16,8 +18,7 @@ public class LevelManager { private BufferedImage[] levelSprite; private Level levelOne; - public LevelManager(Painter painter) { - this.painter = painter; + public LevelManager() { importOutsideSprites(); levelOne = new Level(LoadSave.GetLevelData()); } @@ -32,16 +33,18 @@ public class LevelManager { } } - public void draw() { + public List<Obstacle> generateObstacleTable() { + List<Obstacle> liste = new ArrayList<>(); for (int j = 0; j < Jeu.TILES_IN_HEIGHT; j++) for (int i = 0; i < Jeu.TILES_IN_WIDTH; i++) { int index = levelOne.getSpriteIndex(i, j); - /*g.drawImage(levelSprite[index], Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j, Jeu.TILES_SIZE, Jeu.TILES_SIZE, null);*/ + //g.drawImage(levelSprite[index], Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j, Jeu.TILES_SIZE, Jeu.TILES_SIZE, null); if (index<=14) { - Jeu.obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j), Jeu.TILES_SIZE, Jeu.TILES_SIZE))); - System.out.println(jeu.getObstacleTable().size()); + liste.add(new Obstacle(new HitBox(new Coordonnees(Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j-300), Jeu.TILES_SIZE, Jeu.TILES_SIZE))); + System.out.println(liste.size()); } } + return liste; } public void update() {