From 25577227e019a64bc5976331e67ec9e69afd8384 Mon Sep 17 00:00:00 2001
From: Louis MALTERRE <malterre.louis@laposte.net>
Date: Wed, 23 Nov 2022 19:56:21 +0100
Subject: [PATCH] methode deplacements changee, y'a plus d'argument a lui
 donner j'ai fait qq modifs sur certains attributs, notamment passer
 l'attribut hitbox en attribut de la classe Entity car chaque Entity a une
 hitbox. j'ai laisse en comm l'ancienne version du deplacement dans jeu si
 jamais LM

---
 MAVENProject/PlanUML.puml                     |  4 +
 .../src/main/java/engine/GameController.java  |  1 -
 .../main/java/engine/GameEngineGraphical.java |  1 -
 .../src/main/java/entity/Character.java       | 74 ++++++++++++++-----
 MAVENProject/src/main/java/entity/Entity.java |  7 +-
 MAVENProject/src/main/java/jeu/Jeu.java       | 30 ++++++--
 6 files changed, 89 insertions(+), 28 deletions(-)

diff --git a/MAVENProject/PlanUML.puml b/MAVENProject/PlanUML.puml
index 0e292a2..7a4c29e 100644
--- a/MAVENProject/PlanUML.puml
+++ b/MAVENProject/PlanUML.puml
@@ -59,8 +59,12 @@ class engine.GameEngineGraphical {
 class entity.Character {
 - masse
 - impulsionSaut
+- tableCommand
 + void deplacements()
++ void resetCommand()
++ void getGameCommand()
 + void attaque()
++ void evolveCharacter()
 }
 class entity.Monster{
 + Coordonnees positions
diff --git a/MAVENProject/src/main/java/engine/GameController.java b/MAVENProject/src/main/java/engine/GameController.java
index 8b62d1a..b4f8e56 100644
--- a/MAVENProject/src/main/java/engine/GameController.java
+++ b/MAVENProject/src/main/java/engine/GameController.java
@@ -1,7 +1,6 @@
 package engine;
 
 import java.awt.event.KeyListener;
-import java.util.ArrayList;
 import java.util.HashMap;
 
 /**
diff --git a/MAVENProject/src/main/java/engine/GameEngineGraphical.java b/MAVENProject/src/main/java/engine/GameEngineGraphical.java
index e1c454e..e82d395 100644
--- a/MAVENProject/src/main/java/engine/GameEngineGraphical.java
+++ b/MAVENProject/src/main/java/engine/GameEngineGraphical.java
@@ -1,6 +1,5 @@
 package engine;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 
 /**
diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java
index 3aab51a..b7c696d 100644
--- a/MAVENProject/src/main/java/entity/Character.java
+++ b/MAVENProject/src/main/java/entity/Character.java
@@ -1,5 +1,8 @@
 package entity;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import environnement.Coordonnees;
 import environnement.HitBox;
 import environnement.Physique;
@@ -11,47 +14,84 @@ public class Character extends Entity{
     private double vitesseActuZ = 0;
     private final double impulsionSaut;
     private double masse;
-    private HitBox charaterHitBox;
-    private final double entityWIDTH = 30;
-    private final double entityHEIGHT= 60;
+    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;
+    private Map<String,Double> tableCommande; //table des commandes du perso
+
 
     public Character(Coordonnees c,double vitesseMax,double m,double impSaut){
-        super(c,vitesseMax);
+        super(c,vitesseMax,null); // comme tous les entities ont une hitbox, j'ai factorise
         this.masse = m;
         this.impulsionSaut = impSaut;
-        this.charaterHitBox = new HitBox(c,entityHEIGHT,entityWIDTH);
+        this.hitBox = new HitBox(c,characterHEIGHT,characterWIDTH);
+        this.tableCommande = new HashMap<String,Double>();
+        tableCommande.put("CommandX",(double)0);
+        tableCommande.put("CommandZ",(double)0);
+        
     }
     @Override
-    public void deplacements(double commandX,double commandZ,int alpha){ // alpha indique si il est au sol ou non, il vaut 0 ou 1 en fonction
+    public void deplacements(){ // alpha indique si il est au sol ou non, il vaut 0 ou 1 en fonction
+        getGameCommand();
         double delta = Math.pow(10, -3); // pas de temps remis en secondes
 
         //on actualise les positions
         double newX,newZ;
 
-        newX =  commandX*delta + this.getCoord().getX(); // frottements enleves (le perso finissait par freiner tout seul donc tant que y'a pas d'interet je les enleve, j'ai tjr les equations de cote)
+        newX =  tableCommande.get("CommandX")*delta + this.getCoord().getX(); // frottements enleves (le perso finissait par freiner tout seul donc tant que y'a pas d'interet je les enleve, j'ai tjr les equations de cote)
 
-        if ((commandZ == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ()))newZ = Jeu.getCoordSol().getZ();
-        else newZ = ((1-alpha)*Physique.g - commandZ)/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ();
+        if ((tableCommande.get("CommandZ") == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ()))newZ = Jeu.getCoordSol().getZ();
+        else newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ();
 
         System.out.println("écart de hauteur: "+Math.abs(this.getCoord().getZ()-newZ));
 
         this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees
 
         //on actualise les vitesses
-        vitesseActuX = commandX;
+        vitesseActuX = tableCommande.get("CommandX");
 
-        if ((commandZ == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ())) vitesseActuZ = 0;
-        else vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - commandZ)*delta;
+        if ((tableCommande.get("CommandZ") == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ())) vitesseActuZ = 0;
+        else vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
 
-        System.out.println("vitesse z: "+vitesseActuZ);     
+        System.out.println("vitesse z: "+vitesseActuZ);
+        resetCommand();   
     }
     @Override
     public void attaque(){
 
     }
 
-    public void evolveCharacter(double commandX,double commandZ,int alpha){
-        deplacements(commandX, commandZ, alpha);
+    public void getGameCommand(){
+        Map<String,Boolean> commandeJeu = Jeu.getDirectionJeu();
+        if (commandeJeu.get("Right") && commandeJeu.get("Left")){}
+        else if (commandeJeu.get("Right")) tableCommande.replace("CommandX", vitesseMax);
+        else if (commandeJeu.get("Left")) tableCommande.replace("CommandX", -vitesseMax);
+        if (commandeJeu.get("Jump")) {
+            if (this.getCoord().getZ() < Jeu.getCoordSol().getZ())alpha = 0;
+            else if (this.getVitesseActuZ() == 0){tableCommande.replace("CommandZ", impulsionSaut);/*A.add(charac.getCoord().getZ());n++;*/}
+            }
+            else {
+                tableCommande.replace("CommandZ", (double)0);
+            if (this.getCoord().getZ() < Jeu.getCoordSol().getZ()) { //a retoucher, j'ai besoin d'autres choses pour avancer
+                alpha = 0; 
+            }
+            else{
+                alpha = 1;
+            }
+        
+        }
+            
+            
+    }
+
+    void resetCommand(){
+        for (String key : tableCommande.keySet()){
+            tableCommande.replace(key, (double)0);
+        }
+    }
+
+    public void evolveCharacter(){
+        deplacements();
     }
 
     public double getVitesseMax() {
@@ -74,11 +114,11 @@ public class Character extends Entity{
     }
     @Override
     public double getEntityWIDTH() {
-        return this.entityWIDTH;
+        return this.characterWIDTH;
     }
     @Override
     public double getEntityHEIGHT() {
-        return this.entityHEIGHT;
+        return this.characterHEIGHT;
     }
     
 }
diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java
index 8ac1a15..928320c 100644
--- a/MAVENProject/src/main/java/entity/Entity.java
+++ b/MAVENProject/src/main/java/entity/Entity.java
@@ -1,19 +1,22 @@
 package entity;
 
 import environnement.Coordonnees;
+import environnement.HitBox;
 
 public abstract class Entity {
     private Coordonnees coord;
     final double vitesseMax;
+    protected HitBox hitBox;
 
     private final double entityWIDTH = 10;
     private final double entityHEIGHT = 10;
 
-    public Entity(Coordonnees c,double vitesseMax){
+    public Entity(Coordonnees c,double vitesseMax,HitBox hitBox){
         this.coord = c;
         this.vitesseMax = vitesseMax;
+        this.hitBox = hitBox;
     }
-    public void deplacements(double commandX, double commandZ, int alpha){}
+    public void deplacements(){}
     public void attaque(){}
     public Coordonnees getCoord(){
         return this.coord;
diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java
index d692f10..42142ea 100644
--- a/MAVENProject/src/main/java/jeu/Jeu.java
+++ b/MAVENProject/src/main/java/jeu/Jeu.java
@@ -3,8 +3,8 @@ package jeu;
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 import entity.Character;
 import engine.Game;
@@ -14,6 +14,9 @@ public class Jeu implements Game{
 
     private static Coordonnees coordSol = new Coordonnees(200,700); //coordonnees du sol (en realite juste Z nous interesse)
     static Character charac;
+    private static Map<String,Boolean> directionJeu;
+
+    
 
     public Jeu(String source) {
         BufferedReader helpReader;
@@ -32,6 +35,12 @@ public class Jeu implements Game{
         } catch (IOException e) {
             System.out.println("Help not available");
         }
+
+        directionJeu = new HashMap<String,Boolean>();
+        directionJeu.put("Right", false);
+        directionJeu.put("Left", false);
+        directionJeu.put("Jump", false);
+        
     }
 
     @Override
@@ -39,13 +48,16 @@ public class Jeu implements Game{
         System.out.println("Execute "+command);
         System.out.println(charac.getCoord().getX());
         System.out.println(charac.getCoord().getZ());
-        double comX,comZ;
+        /*double comX,comZ;
         int a = 1;
         
         comX = 0;
-        comZ = 0;
+        comZ = 0;*/
 
-        boolean Right = command.get("Right");
+        directionJeu.replace("Right", command.get("Right"));
+        directionJeu.replace("Left", command.get("Left"));
+        directionJeu.replace("Jump", command.get("Jump"));
+        /*Boolean Right = command.get("Right");
         boolean Left = command.get("Left");
         boolean Jump = command.get("Jump");
 
@@ -58,7 +70,7 @@ public class Jeu implements Game{
         }
         if (Jump) {
             if (charac.getCoord().getZ() < coordSol.getZ())a = 0;
-        else if (charac.getVitesseActuZ() == 0){comZ = charac.getImpulsionSaut();/*A.add(charac.getCoord().getZ());n++;*/}
+        else if (charac.getVitesseActuZ() == 0){comZ = charac.getImpulsionSaut();/*A.add(charac.getCoord().getZ());n++;/}
         }
         else {
             if (charac.getCoord().getZ() < coordSol.getZ()) { //a retoucher, j'ai besoin d'autres choses pour avancer
@@ -68,8 +80,8 @@ public class Jeu implements Game{
                 a = 1;
             }
         
-        }
-        charac.deplacements(comX, comZ, a);
+        }*/
+        charac.evolveCharacter();
     }
 
     @Override
@@ -85,5 +97,9 @@ public class Jeu implements Game{
     public static Coordonnees getCoordSol(){
         return coordSol;
     }
+
+    public static Map<String, Boolean> getDirectionJeu() {
+        return directionJeu;
+    }
     
 }
\ No newline at end of file
-- 
GitLab