Transition entite to element dynamique

This commit is contained in:
Amaury Joly 2020-12-04 15:42:35 +01:00
parent f05bd67d8f
commit 6515ac97c6
4 changed files with 19 additions and 25 deletions

View File

@ -1,9 +1,6 @@
package modele.calculs; package modele.calculs;
import modele.donnees.ElementFond; import modele.donnees.*;
import modele.donnees.ElementPhysique;
import modele.donnees.Entite;
import modele.donnees.EntiteDynamique;
import java.awt.*; import java.awt.*;
@ -28,8 +25,8 @@ public class Controle4Directions extends RealisateurDeDeplacement {
public boolean realiserDeplacement() { public boolean realiserDeplacement() {
boolean ret = false; boolean ret = false;
for (Entite e : lstEntitesDynamiques) { for (ElementDynamique e : lstEntitesDynamiques) {
if (directionCourante != null) if (e instanceof Entite && directionCourante != null)
switch (directionCourante) { switch (directionCourante) {
case gauche: case gauche:
case droite: case droite:
@ -38,19 +35,11 @@ public class Controle4Directions extends RealisateurDeDeplacement {
break; break;
case bas: case bas:
case haut: case haut:
ElementFond ef = e.regarderDerriereSoit(); ElementFond ef = ((Entite) e).regarderDerriereSoit();
if(ef != null && ef.peutPermettreDeMonterDescendre()) { if(ef != null && ef.peutPermettreDeMonterDescendre()) {
ret = e.avancerDirectionChoisie(directionCourante); 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; break;
} }
} }

View File

@ -7,13 +7,15 @@ public class Gravite extends RealisateurDeDeplacement {
public boolean realiserDeplacement() { public boolean realiserDeplacement() {
boolean ret = false; boolean ret = false;
for (Entite e : lstEntitesDynamiques) { for (ElementDynamique e : lstEntitesDynamiques) {
ElementPhysique eBas = e.regarderDansLaDirection(Direction.bas); if(e instanceof Entite) {
ElementFond eFond = e.regarderDerriereSoit(); ElementPhysique eBas = ((Entite) e).regarderDansLaDirection(Direction.bas);
if(!(eFond != null && eFond.peutPermettreDeMonterDescendre()) ElementFond eFond = ((Entite) e).regarderDerriereSoit();
&& eBas == null || (eBas != null && !eBas.peutServirDeSupport())) { if (!(eFond != null && eFond.peutPermettreDeMonterDescendre())
if (e.avancerDirectionChoisie(Direction.bas)) && eBas == null || (eBas != null && !eBas.peutServirDeSupport())) {
ret = true; if (e.avancerDirectionChoisie(Direction.bas))
ret = true;
}
} }
} }

View File

@ -1,5 +1,6 @@
package modele.calculs; package modele.calculs;
import modele.donnees.ElementDynamique;
import modele.donnees.Entite; import modele.donnees.Entite;
import modele.donnees.EntiteDynamique; import modele.donnees.EntiteDynamique;
@ -9,8 +10,8 @@ import java.util.ArrayList;
Tous les déplacement sont déclenchés par cette classe (gravité, controle clavier, IA, etc.) Tous les déplacement sont déclenchés par cette classe (gravité, controle clavier, IA, etc.)
*/ */
public abstract class RealisateurDeDeplacement { public abstract class RealisateurDeDeplacement {
protected ArrayList<Entite> lstEntitesDynamiques = new ArrayList<Entite>(); protected ArrayList<ElementDynamique> lstEntitesDynamiques = new ArrayList<ElementDynamique>();
protected abstract boolean realiserDeplacement(); protected abstract boolean realiserDeplacement();
public void addEntiteDynamique(Entite ed) {lstEntitesDynamiques.add(ed);}; public void addEntiteDynamique(ElementDynamique ed) {lstEntitesDynamiques.add(ed);};
} }

View File

@ -1,5 +1,7 @@
package modele.donnees; package modele.donnees;
public interface ElementDynamique { import modele.calculs.Direction;
public interface ElementDynamique {
boolean avancerDirectionChoisie(Direction d);
} }