Deplacement haut bas + retire du saut + gestion des cordes

This commit is contained in:
Amaury 2020-12-02 21:15:43 +01:00
parent 6e20719471
commit d4e7fc176b
4 changed files with 42 additions and 12 deletions

View File

@ -1,9 +1,12 @@
package modele.calculs;
import modele.donnees.ElementFond;
import modele.donnees.ElementPhysique;
import modele.donnees.Entite;
import modele.donnees.EntiteDynamique;
import java.awt.*;
/**
* Controle4Directions permet d'appliquer une direction (connexion avec le clavier) à un ensemble d'entités dynamiques
*/
@ -33,15 +36,21 @@ public class Controle4Directions extends RealisateurDeDeplacement {
if (e.avancerDirectionChoisie(directionCourante))
ret = true;
break;
case bas:
case haut:
ElementFond ef = e.regarderDerriereSoit();
if(ef != null && ef.peutPermettreDeMonterDescendre()) {
ret = e.avancerDirectionChoisie(directionCourante);
}
/*
// on ne peut pas sauter sans prendre appui
// (attention, test d'appui réalisé à partir de la position courante, si la gravité à été appliquée, il ne s'agit pas de la position affichée, amélioration possible)
ElementPhysique eBas = e.regarderDansLaDirection(Direction.bas);
if (eBas != null && eBas.peutServirDeSupport()) {
if (e.avancerDirectionChoisie(Direction.haut))
ret = true;
}
}*/
break;
}
}

View File

@ -1,9 +1,6 @@
package modele.calculs;
import modele.donnees.ElementPhysique;
import modele.donnees.Entite;
import modele.donnees.EntiteDynamique;
import modele.donnees.ObjetGyromide;
import modele.donnees.*;
public class Gravite extends RealisateurDeDeplacement {
@Override
@ -12,7 +9,9 @@ public class Gravite extends RealisateurDeDeplacement {
for (Entite e : lstEntitesDynamiques) {
ElementPhysique eBas = e.regarderDansLaDirection(Direction.bas);
if (eBas == null || (eBas != null && !eBas.peutServirDeSupport())) {
ElementFond eFond = e.regarderDerriereSoit();
if(!(eFond != null && eFond.peutPermettreDeMonterDescendre())
&& eBas == null || (eBas != null && !eBas.peutServirDeSupport())) {
if (e.avancerDirectionChoisie(Direction.bas))
ret = true;
}

View File

@ -100,6 +100,11 @@ public class Jeu {
Point positionEntite = map.get(e);
return objetALaPosition(calculerPointCible(positionEntite, d));
}
public ElementFond regarderDerriereSoit(Entite e) {
Point positionEntite = map.get(e);
return fondALaPosition(positionEntite);
}
/** Si le déplacement de l'entité est autorisé (pas de mur ou autre entité), il est réalisé
* Sinon, rien n'est fait.
@ -168,11 +173,7 @@ public class Jeu {
}
private ElementPhysique objetALaPosition(Point p) {
ObjetGyromide retour = null;
if (contenuDansGrille(p)) {
retour = grilleEntites[p.x][p.y][0];
}
ObjetGyromide retour = objetGyALaPosition(p, 0);
if(retour instanceof ElementPhysique)
return (ElementPhysique) retour;
@ -180,6 +181,24 @@ public class Jeu {
return null;
}
private ElementFond fondALaPosition(Point p) {
ObjetGyromide retour = objetGyALaPosition(p, 1);
if(retour instanceof ElementFond)
return (ElementFond) retour;
else
return null;
}
private ObjetGyromide objetGyALaPosition(Point p, int prof) {
ObjetGyromide retour = null;
if (contenuDansGrille(p)) {
retour = grilleEntites[p.x][p.y][prof];
}
return retour;
}
public Ordonnanceur getOrdonnanceur() {
return ordonnanceur;
}

View File

@ -19,4 +19,7 @@ public abstract class Entite extends ElementPhysique implements ElementDynamique
public ElementPhysique regarderDansLaDirection(Direction d) {
return jeu.regarderDansLaDirection(this, d);
}
public ElementFond regarderDerriereSoit() {
return jeu.regarderDerriereSoit(this);
}
}