From 193b42690eb3694517fd1c7a32a9be9ca6091933 Mon Sep 17 00:00:00 2001 From: Azurlors <florianrichard2001@gmail.com> Date: Sun, 27 Nov 2022 22:36:58 +0100 Subject: [PATCH] =?UTF-8?q?=C3=A7a=20marche=20!!=20fait=20tester?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MAVENProject/PlanUML.puml | 5 ++- .../src/main/java/entity/Character.java | 10 ++++- .../src/main/java/environnement/HitBox.java | 24 ++++++------ .../src/main/java/environnement/Obstacle.java | 8 ++++ MAVENProject/src/main/java/jeu/Painter.java | 38 ++++++++++++------- 5 files changed, 55 insertions(+), 30 deletions(-) diff --git a/MAVENProject/PlanUML.puml b/MAVENProject/PlanUML.puml index af88d0c..e402530 100644 --- a/MAVENProject/PlanUML.puml +++ b/MAVENProject/PlanUML.puml @@ -102,8 +102,11 @@ entity.Entity <|.. entity.Monster class environment.Obstacle{ +} + +class environment.Hitbox{ - HashMap<String, Coordonnees> extremites -- int static defaultUnit ++ public {static} Boolean Collision() } class environment.Coordonnees{ - int x diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index e1f836b..57419f3 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -15,6 +15,7 @@ public class Character extends Entity{ private double vitesseActuZ = 0; private final double impulsionSaut; private double masse; + private HitBox hitBox; private int alpha = 1; // gere les collisions avec le sol private final double characterWIDTH = 30; // pour l'instant je les ai renommes, ca peut changer private final double characterHEIGHT= 60; @@ -22,12 +23,12 @@ public class Character extends Entity{ //private BufferedImage sprite; - public Character(Coordonnees c,double vitesseMax,double m,double impSaut){ + public Character(Coordonnees c, double vitesseMax, double m, double impSaut){ super(c,vitesseMax,null); // comme tous les entities ont une hitbox, j'ai factorise this.masse = m; this.impulsionSaut = impSaut; this.hitBox = new HitBox(c,characterHEIGHT,characterWIDTH); - this.tableCommande = new HashMap<String,Double>(); + this.tableCommande = new HashMap<>(); tableCommande.put("CommandX",(double)0); tableCommande.put("CommandZ",(double)0); //sprite = CharacterLoader.getImageCharacter(); @@ -94,6 +95,7 @@ public class Character extends Entity{ checkIfOnGround(); deplacements(); resetCommand(); + this.hitBox = new HitBox(this.getCoord(),characterHEIGHT,characterWIDTH); // mise à jour crade pour l'instant } public double getVitesseMax() { @@ -125,5 +127,9 @@ public class Character extends Entity{ public int getAlpha() { return alpha; } + + public HitBox getHitBox() { + return hitBox; + } } diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java index dba83a7..bc1b859 100644 --- a/MAVENProject/src/main/java/environnement/HitBox.java +++ b/MAVENProject/src/main/java/environnement/HitBox.java @@ -3,6 +3,7 @@ package environnement; import java.util.HashMap; public class HitBox { + //private final Coordonnees centre; private HashMap<String, Coordonnees> extremites = new HashMap<String,Coordonnees>(); private static double defaultUnit = 10; @@ -25,17 +26,14 @@ public class HitBox { return (int)defaultUnit; } - public static Boolean Collision(HitBox A, HitBox B){ // lignes sautées pour raison de lisibilité - return A.extremites.get("HautDroite").getX() >= B.extremites.get("BasGauche").getX() - && A.extremites.get("HautDroite").getZ() <= B.extremites.get("BasGauche").getZ() - || - A.extremites.get("BasDroite").getX() >= B.extremites.get("HautGauche").getX() - && A.extremites.get("BasDroite").getZ() >= B.extremites.get("HautGauche").getZ() - || - A.extremites.get("HautGauche").getX() <= B.extremites.get("BasDroite").getX() - && A.extremites.get("HautGauche").getZ() <= B.extremites.get("BasDroite").getZ() - || - A.extremites.get("BasGauche").getX() <= B.extremites.get("HautDroite").getX() - && A.extremites.get("BasGauche").getZ() >= B.extremites.get("HautDroite").getZ(); + public static Boolean collision(HitBox A, HitBox B){ // lignes sautées pour raison de lisibilité + + return (!(A.extremites.get("HautGauche").getX() >= B.extremites.get("HautDroite").getX())) // A est au dessus de B + && (!(A.extremites.get("HautDroite").getX() <= B.extremites.get("HautGauche").getX())) // A est à droite de B + && (!(A.extremites.get("HautGauche").getZ() >= B.extremites.get("BasGauche").getZ())) // A est à gauche de B + && (!(A.extremites.get("BasGauche").getZ() <= B.extremites.get("HautGauche").getZ())); // A est en dessous de B + } + public HashMap<String, Coordonnees> getExtremites() { + return extremites; } -} +} \ No newline at end of file diff --git a/MAVENProject/src/main/java/environnement/Obstacle.java b/MAVENProject/src/main/java/environnement/Obstacle.java index ddea563..c7d08ce 100644 --- a/MAVENProject/src/main/java/environnement/Obstacle.java +++ b/MAVENProject/src/main/java/environnement/Obstacle.java @@ -3,4 +3,12 @@ package environnement; public class Obstacle { + private HitBox hitbox; + + public Obstacle(HitBox h){ + this.hitbox = h; + } + public HitBox getHitbox() { + return hitbox; + } } diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java index 9002459..dbf49de 100644 --- a/MAVENProject/src/main/java/jeu/Painter.java +++ b/MAVENProject/src/main/java/jeu/Painter.java @@ -2,13 +2,15 @@ package jeu; import engine.GamePainter; import entity.Character; +import environnement.Coordonnees; +import environnement.HitBox; import environnement.Obstacle; import java.awt.*; import java.awt.image.BufferedImage; +import java.util.HashMap; - -import static environnement.HitBox.getDefaultUnit; +import static environnement.HitBox.collision; import static jeu.Jeu.gameCharacter; import static jeu.Jeu.gameCharacterLoader; import static jeu.Jeu.getCoordSol; @@ -18,6 +20,8 @@ public class Painter implements GamePainter{ protected static final int WIDTH = 1000; protected static final int HEIGHT = 1000; + private Obstacle test = new Obstacle(new HitBox(new Coordonnees(300,550),100,120)); + public Painter() { } @@ -28,10 +32,17 @@ public class Painter implements GamePainter{ crayon.setColor(Color.blue); drawCharacter(crayon, gameCharacter,gameCharacterLoader.getImageCharacter()); drawSol(crayon); - crayon.setColor(Color.red); + if (!collision(gameCharacter.getHitBox(), test.getHitbox())){ + crayon.setColor(Color.blue); + } + else { + crayon.setColor(Color.red); + } + drawObstacle(crayon,test); //drawQuadrillage(crayon); } + @Override public int getWidth() { return WIDTH; @@ -46,25 +57,24 @@ public class Painter implements GamePainter{ int x = (int) gameCharacter.getCoord().getX(); int y = (int) gameCharacter.getCoord().getZ(); //crayon.fillRect(x-15,y-30, (int) gameCharacter.getEntityWIDTH(),(int) gameCharacter.getEntityHEIGHT()); - crayon.drawImage(imageCharac, x-30, y-60, null, null); + crayon.drawImage(imageCharac, x-(int) gameCharacter.getEntityWIDTH(), y- (int) gameCharacter.getEntityHEIGHT(), null, null); } private void drawObstacle(Graphics2D crayon, Obstacle obstacle){ + HashMap<String, Coordonnees> extremites = obstacle.getHitbox().getExtremites(); + Coordonnees hd = extremites.get("HautDroite"); + Coordonnees bd = extremites.get("BasDroite"); + Coordonnees hg = extremites.get("HautGauche"); + Coordonnees bg = extremites.get("BasGauche"); + 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()); + crayon.drawLine((int)hg.getX(),(int)hg.getZ(),(int)hd.getX(),(int)hd.getZ()); } private void drawSol(Graphics2D crayon){ crayon.drawLine(0,(int) getCoordSol().getZ(),WIDTH,(int) getCoordSol().getZ()); } - - private void drawQuadrillage(Graphics2D crayon){ //pour le test de la classe obstacle - int taille = getDefaultUnit(); - for (int i=1;i<(double) HEIGHT/taille;i++) { - crayon.drawLine(0, i * taille, WIDTH, i * taille); - } - for (int j =0;j<(double) WIDTH/taille;j++) { - crayon.drawLine(j * taille, 0, j * taille,HEIGHT ); - } - } } -- GitLab