diff --git a/src/modele/calculs/Controle4Directions.java b/src/modele/calculs/Controle4Directions.java index f9d2b97..998e766 100644 --- a/src/modele/calculs/Controle4Directions.java +++ b/src/modele/calculs/Controle4Directions.java @@ -1,9 +1,6 @@ package modele.calculs; -import modele.donnees.ElementFond; -import modele.donnees.ElementPhysique; -import modele.donnees.Entite; -import modele.donnees.EntiteDynamique; +import modele.donnees.*; import java.awt.*; @@ -28,8 +25,8 @@ public class Controle4Directions extends RealisateurDeDeplacement { public boolean realiserDeplacement() { boolean ret = false; - for (Entite e : lstEntitesDynamiques) { - if (directionCourante != null) + for (ElementDynamique e : lstEntitesDynamiques) { + if (e instanceof Entite && directionCourante != null) switch (directionCourante) { case gauche: case droite: @@ -38,19 +35,11 @@ public class Controle4Directions extends RealisateurDeDeplacement { break; case bas: case haut: - ElementFond ef = e.regarderDerriereSoit(); + ElementFond ef = ((Entite) 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; } } diff --git a/src/modele/calculs/Gravite.java b/src/modele/calculs/Gravite.java index e74705e..d7539d1 100644 --- a/src/modele/calculs/Gravite.java +++ b/src/modele/calculs/Gravite.java @@ -7,13 +7,15 @@ public class Gravite extends RealisateurDeDeplacement { public boolean realiserDeplacement() { boolean ret = false; - for (Entite e : lstEntitesDynamiques) { - ElementPhysique eBas = e.regarderDansLaDirection(Direction.bas); - ElementFond eFond = e.regarderDerriereSoit(); - if(!(eFond != null && eFond.peutPermettreDeMonterDescendre()) - && eBas == null || (eBas != null && !eBas.peutServirDeSupport())) { - if (e.avancerDirectionChoisie(Direction.bas)) - ret = true; + for (ElementDynamique e : lstEntitesDynamiques) { + if(e instanceof Entite) { + ElementPhysique eBas = ((Entite) e).regarderDansLaDirection(Direction.bas); + ElementFond eFond = ((Entite) e).regarderDerriereSoit(); + if (!(eFond != null && eFond.peutPermettreDeMonterDescendre()) + && eBas == null || (eBas != null && !eBas.peutServirDeSupport())) { + if (e.avancerDirectionChoisie(Direction.bas)) + ret = true; + } } } diff --git a/src/modele/calculs/RealisateurDeDeplacement.java b/src/modele/calculs/RealisateurDeDeplacement.java index 4ecd666..4180a0c 100644 --- a/src/modele/calculs/RealisateurDeDeplacement.java +++ b/src/modele/calculs/RealisateurDeDeplacement.java @@ -1,5 +1,6 @@ package modele.calculs; +import modele.donnees.ElementDynamique; import modele.donnees.Entite; 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.) */ public abstract class RealisateurDeDeplacement { - protected ArrayList lstEntitesDynamiques = new ArrayList(); + protected ArrayList lstEntitesDynamiques = new ArrayList(); protected abstract boolean realiserDeplacement(); - public void addEntiteDynamique(Entite ed) {lstEntitesDynamiques.add(ed);}; + public void addEntiteDynamique(ElementDynamique ed) {lstEntitesDynamiques.add(ed);}; } diff --git a/src/modele/donnees/ElementDynamique.java b/src/modele/donnees/ElementDynamique.java index b46b557..2fad674 100644 --- a/src/modele/donnees/ElementDynamique.java +++ b/src/modele/donnees/ElementDynamique.java @@ -1,5 +1,7 @@ package modele.donnees; -public interface ElementDynamique { +import modele.calculs.Direction; +public interface ElementDynamique { + boolean avancerDirectionChoisie(Direction d); }