@Override public boolean ramassePotion(int refRMI, int refPotion) throws RemoteException { boolean res = false; VuePersonnage vuePersonnage = personnages.get(refRMI); VuePotion vuePotion = potions.get(refPotion); if (vuePersonnage.isActionExecutee()) { // si une action a deja ete executee logActionDejaExecutee(refRMI); } else { // sinon, on tente de jouer l'interaction int distance = Calculs.distanceChebyshev(vuePersonnage.getPosition(), vuePotion.getPosition()); // on teste la distance entre le personnage et la potion if (distance <= Constantes.DISTANCE_MIN_INTERACTION) { new Ramassage(this, vuePersonnage, vuePotion).interagit(); personnages.get(refRMI).executeAction(); res = true; } else { logger.warning( Constantes.nomClasse(this), nomRaccourciClient(refRMI) + " a tente d'interagir avec " + vuePotion.getElement().getNom() + ", alors qu'il est trop eloigne !\nDistance = " + distance); } } return res; }
@Override public boolean Fuite(int refRMI, int refRMIaFuir) throws RemoteException { boolean res = false; VuePersonnage client = personnages.get(refRMI); if (client.isActionExecutee()) { // si une action a deja ete executee logActionDejaExecutee(refRMI); } else { Point pMoi = this.getPosition(refRMI); Point pAFuir = this.getPosition(refRMIaFuir); Point objectif = pMoi; if (pMoi.getX() - pAFuir.getX() > 0) objectif.x++; else objectif.x--; if (pMoi.getY() - pAFuir.getY() > 0) objectif.y++; else objectif.y--; // sinon, on tente de jouer l'interaction new Deplacement(client, getVoisins(refRMI)).seDirigeVers(objectif); client.executeAction(); res = true; } return res; }
@Override public boolean deplaceRapidement(int refRMI, Point objectif) throws RemoteException { boolean res = false; VuePersonnage client = personnages.get(refRMI); if (client.isActionExecutee()) { // si une action a deja ete executee logActionDejaExecutee(refRMI); } else { // sinon, on tente de jouer l'interaction new DeplacementRapide(client, getVoisins(refRMI)).seDirigeVers(objectif); client.executeAction(); res = true; } return res; }
@Override public boolean invoquer(int refRMI, int nbSbires) throws RemoteException { // TODO Auto-generated method stub boolean res = false; VuePersonnage invoqueur = personnages.get(refRMI); if (invoqueur.isActionExecutee()) { // si une action a deja ete executee logActionDejaExecutee(refRMI); } else { // sinon, on tente de jouer l'interaction new Invocation(this, invoqueur, nbSbires).invoquerSbires(); invoqueur.executeAction(); res = true; } return res; }