diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index 26d30bfd9073d59a8634ffedc948026f36e79f35..72bb08818518a646ca10eb6e2e107e83a92158e2 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -123,5 +123,8 @@ public class Character extends Entity{ public double getEntityHEIGHT() { return this.characterHEIGHT; } + public int getAlpha() { + return alpha; + } } diff --git a/MAVENProject/src/main/java/jeu/Controller.java b/MAVENProject/src/main/java/jeu/Controller.java index 0f16ab1422c335ce15ec2113be16439308c7d4dd..625d8824ac734024b632ab623e0c417b2326822a 100644 --- a/MAVENProject/src/main/java/jeu/Controller.java +++ b/MAVENProject/src/main/java/jeu/Controller.java @@ -8,6 +8,7 @@ import java.util.HashMap; public class Controller implements GameController{ private boolean isRightPressed, isLeftPressed, isSpacePressed; + private boolean isLeftCLickPressed; private HashMap<String,Boolean> cmd = new HashMap<String,Boolean>(); /* * commande en cours @@ -18,7 +19,8 @@ public class Controller implements GameController{ */ public Controller() { - isRightPressed = false; isLeftPressed = false; isSpacePressed = false; + isRightPressed = false; isLeftPressed = false; isSpacePressed = false; isLeftCLickPressed = false; // pour attaquer sur clique gauche + // pour l'instant faut appuyer sur Q mais c'est a changer } /** * getCommand retourne une liste de booleans sous la forme [isRightPressed, isLeftPressed, isSpacePressed] @@ -28,6 +30,7 @@ public class Controller implements GameController{ cmd.put("Right",isRightPressed); cmd.put("Left",isLeftPressed); cmd.put("Jump",isSpacePressed); + cmd.put("Attack",isLeftCLickPressed); return cmd; } @Override @@ -39,6 +42,7 @@ public class Controller implements GameController{ case KeyEvent.VK_RIGHT -> isRightPressed = true; case KeyEvent.VK_LEFT -> isLeftPressed = true; case KeyEvent.VK_SPACE -> isSpacePressed = true; + case KeyEvent.VK_Q -> isLeftCLickPressed = true; } } @Override @@ -47,6 +51,7 @@ public class Controller implements GameController{ case KeyEvent.VK_RIGHT -> isRightPressed = false; case KeyEvent.VK_LEFT -> isLeftPressed = false; case KeyEvent.VK_SPACE -> isSpacePressed = false; + case KeyEvent.VK_Q -> isLeftCLickPressed = false; } } @Override diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java index db3c886fc6995c1974ab9cce5fdd0f32f6ab6a35..18142087e64ca374daf0336bce04f562d02498c0 100644 --- a/MAVENProject/src/main/java/jeu/Jeu.java +++ b/MAVENProject/src/main/java/jeu/Jeu.java @@ -4,7 +4,9 @@ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import entity.Character; @@ -22,9 +24,12 @@ public class Jeu implements Game{ String characterSkinPath; // jsp si c'est le jeu qui doit gerer ca, au pire vous pouvez changer final String beginPath; String movement; + String previousMovement; int numberOfMovement; - int nbIterationPerFrame = 100; + int nbIterationPerFrame = 50; int nbBeforeFramechgt = nbIterationPerFrame; + //private boolean characterNotMoving = true; + private boolean characterAttacking = false; //boolean necessaire pour rendre l'animation d'attaque prioritaire public Jeu(String source) { @@ -35,6 +40,7 @@ public class Jeu implements Game{ assert url != null; beginPath = url.toString().substring(6)+"/"; movement = "Character_idle"; + previousMovement = movement; numberOfMovement = 1; characterSkinPath = beginPath + movement + numberOfMovement + ".png"; // path premiere frame /*A = new ArrayList<Double>(); @@ -52,58 +58,83 @@ public class Jeu implements Game{ System.out.println("Help not available"); } + //on remplit la table de directions du jeu directionJeu = new HashMap<>(); directionJeu.put("Right", false); directionJeu.put("Left", false); directionJeu.put("Jump", false); + directionJeu.put("Attack",false); + //on remplit la map des frames + Map<String,List<String>> tempMap = gameCharacterLoader.getPathTable(); + + tempMap.put(movement,new ArrayList<String>()); + tempMap.get(movement).add("1"); + tempMap.get(movement).add("2"); + + tempMap.put("Character_attack",new ArrayList<String>()); + tempMap.get("Character_attack").add("1"); + tempMap.get("Character_attack").add("2"); + tempMap.get("Character_attack").add("3"); + + gameCharacterLoader.setPathTable(tempMap); + } @Override - public void evolve(HashMap<String,Boolean> command) { // command est sous la forme list de Boolean qui represente les touches préssées. Voir Controller pour la compositions de cet list. - /*System.out.println("Execute "+command); - System.out.println(gameCharacter.getCoord().getX()); - System.out.println(gameCharacter.getCoord().getZ());*/ - /*double comX,comZ; - int a = 1; - - comX = 0; - comZ = 0;*/ + public void evolve(HashMap<String,Boolean> command) { // command est sous la forme map de Boolean qui represente les touches préssées. Voir Controller pour la compositions de cet list. + + previousMovement = movement; directionJeu.replace("Right", command.get("Right")); directionJeu.replace("Left", command.get("Left")); directionJeu.replace("Jump", command.get("Jump")); - /*Boolean Right = command.get("Right"); + directionJeu.replace("Attack",command.get("Attack")); + Boolean Right = command.get("Right"); boolean Left = command.get("Left"); boolean Jump = command.get("Jump"); + boolean Attack = command.get("Attack"); - if (Right && Left){} - else if (Right) { - comX = gameCharacter.getVitesseMax(); - } - else if (Left) { - comX = -gameCharacter.getVitesseMax(); + + //perso evolue dans le jeu + gameCharacter.evolveCharacter(); + + //animation du perso dans le jeu (definir la bonne frame a tel instant) + if (Attack) { + movement = "Character_attack"; + characterAttacking = true; } - if (Jump) { - if (gameCharacter.getCoord().getZ() < coordSol.getZ())a = 0; - else if (gameCharacter.getVitesseActuZ() == 0){comZ = gameCharacter.getImpulsionSaut();/*A.add(gameCharacter.getCoord().getZ());n++;/} + if (!Right && !Left && (gameCharacter.getAlpha() == 1) && !characterAttacking){ + movement = "Character_idle"; + } - else { - if (gameCharacter.getCoord().getZ() < coordSol.getZ()) { //a retoucher, j'ai besoin d'autres choses pour avancer - a = 0; - } - else{ - a = 1; + + //characterNotMoving = false; + + else{ // squelette pour futures implementations + if (!characterAttacking){ //animation d'attaque prioritaire + movement = "Character_idle"; //ca changera quand j'aurai les nouvelles frames } + } + - }*/ - gameCharacter.evolveCharacter(); + //si on a change de mouvement, le jeu doit redemarrer a la premiere frame correspondante + if (previousMovement != movement){numberOfMovement = 1;nbBeforeFramechgt = nbIterationPerFrame;} + if (numberOfMovement == gameCharacterLoader.getPathTable().get(movement).size()){ + //characterNotMoving = true; + if (movement == "Character_attack"){ + characterAttacking = false; + } + } if ((nbIterationPerFrame-nbBeforeFramechgt) == nbIterationPerFrame) { // timer pour changer de frame - numberOfMovement = numberOfMovement%2 + 1; + numberOfMovement = numberOfMovement%gameCharacterLoader.getPathTable().get(movement).size() + 1; //a revoir nbBeforeFramechgt = nbIterationPerFrame; } else nbBeforeFramechgt--; + + + //actualisation de l'image a afficher characterSkinPath = beginPath + movement + numberOfMovement + ".png"; gameCharacterLoader.setSkinPath(characterSkinPath); gameCharacterLoader.refreshImage(); diff --git a/MAVENProject/src/main/java/loaders/CharacterLoader.java b/MAVENProject/src/main/java/loaders/CharacterLoader.java index 4ba4b8de82d622e1f62e53f806bd13d726674340..e33010a79180e35a1698142c9a1f72eb68396d64 100644 --- a/MAVENProject/src/main/java/loaders/CharacterLoader.java +++ b/MAVENProject/src/main/java/loaders/CharacterLoader.java @@ -2,6 +2,10 @@ package loaders; import entity.Character; import java.awt.Image; +import java.util.Map; +import java.util.HashMap; +import java.util.List; + import javax.swing.ImageIcon; public class CharacterLoader { // classe qui cree le perso @@ -9,11 +13,14 @@ public class CharacterLoader { // classe qui cree le perso private String skinPath; // chemin du skin a l'instant t du jeu //private String nameImageOfSkin; // nom de l'image du skin (le truc fonctionne comme ca) private Image imageCharacter; + private Map<String,List<String>> pathTable; // objet utilise a revoir public CharacterLoader(String path,Character charac){ gameCharacter = charac; skinPath = path; imageCharacter = new ImageIcon(path).getImage(); + pathTable = new HashMap<String,List<String>>(); + } public void refreshImage(){ @@ -37,5 +44,13 @@ public class CharacterLoader { // classe qui cree le perso this.skinPath = skinPath; } + public Map<String, List<String>> getPathTable() { + return pathTable; + } + + public void setPathTable(Map<String, List<String>> pathTable) { + this.pathTable = pathTable; + } + }