import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;

public class EinsatzLeiter extends Actor
{
    // Hier werden alle Roboter aufgelistet, denen der Einsatzleiter Befehle erteilen kann:
    AB9 legeRoboter; //Legeroboter
    AB9 sprengRoboter1; //Sprengroboter 1
    AB9 sprengRoboter2; //Sprengroboter 2
    AB9 aufzugRoboter; //Aufzugroboter
    
    // Roboter für Einsatz 10
    AB10 roboter1;
    AB10 roboter2;
    AB10 roboter3;

    /*#
     * Aufgabe 10: Anweisung 1
     * Hier werden Methoden am sprengRoboter1 aufgerufen.
     * Tipp: Schreibe sprengRoboter1. und druecke STRG+Leertaste --> Schau mal, welche Methoden du alle zur Verfuegung hast ...
     */
    public void holeBombeUndSprenge (int bx, int by, int sx, int sy){
        // Hinweis:
        // Der sprengRoboter1 bekommt den Befehl holeBombeUndKehreZurueck(bx, by), wenn du vorher beim AB9-Roboter programmiert hast.
        // (bx|by) sind die Koordinaten der Bombe --> das muss dann der Methodenaufrufer eingeben (also du spaeter, 
        // wenn du am EinsatzLeiter diese Methode aufrufst): sprengRoboter1.holeBombeUndKehreZurueck(bx, by);
        // Gib dem sprengRoboter1 den Befehl zum Sprengen an der Position (sx,sy):
        // Kombiniere nun die richtigen Methodenaufrufe beim Aufzug- und Sprengroboter.
        aufzugRoboter.holeAufzug();
        sprengRoboter1.holeBombeUndKehreZurueck(bx,by);
        sprengRoboter1.sprenge(sx,sy);        
    }

 

    /*#
     * Ab hier kannst du Hilfs-Methoden fuer den Einsatz 9+10 implementieren:
     */

    /*#
     * Einsatz 9:
     */
    public void einsatz9() {
        aufzugRoboter.holeAufzug();
        sprengRoboter1.holeBombeUndKehreZurueck(2,4);
        sprengRoboter1.sprenge(9,5);
        sprengRoboter1.dreheUm();
        sprengRoboter1.holeBombeUndKehreZurueck(3,4);
        sprengRoboter1.sprenge(3,8);
        sprengRoboter1.dreheUm();
        sprengRoboter1.einsVor();
        sprengRoboter1.fahreInsStockwerk(4);
        sprengRoboter1.dreheLinks();
        sprengRoboter1.einsVor();
        sprengRoboter1.einsVor();
        sprengRoboter1.einsVor();
        sprengRoboter1.einsVor();
        sprengRoboter1.dreheUm();
        aufzugRoboter.holeAufzug();
        sprengRoboter2.holeBombeUndKehreZurueck(4,4);
        sprengRoboter2.dreheUm();
        sprengRoboter2.einsVor();
        sprengRoboter2.aufnehmen();
        sprengRoboter2.dreheUm();
        sprengRoboter2.einsVor();
        sprengRoboter2.sprenge(11,9);
        sprengRoboter2.benutze("Bombe");
        sprengRoboter2.dreheUm();
        sprengRoboter2.einsVor();
        sprengRoboter2.fahreInsStockwerk(4);
        sprengRoboter2.dreheLinks();
        sprengRoboter2.einsVor();
        aufzugRoboter.holeAufzug();
        while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor();
        legeRoboter.fahreInsStockwerk(5);
        legeRoboter.dreheLinks();

        legeRoboter.einsVor();
        legeRoboter.legeZweierreihe(3);
        legeRoboter.dreheUm();
        while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor();
        legeRoboter.fahreInsStockwerk(8);
        legeRoboter.dreheRechts();
        legeRoboter.einsVor();
        legeRoboter.benutze("Akku");
        legeRoboter.benutze("Akku");
       
           legeRoboter.legeZweierreihe(3);
       
        legeRoboter.dreheUm();
        while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor();
        legeRoboter.fahreInsStockwerk(9);
        legeRoboter.dreheLinks();
        legeRoboter.einsVor();
        legeRoboter.benutze("Akku");
        legeRoboter.benutze("Akku");
        legeRoboter.legeZweierreihe(5);
        legeRoboter.dreheUm();
        while(!legeRoboter.istAufGegenstand("Aufzug"))legeRoboter.einsVor();
        legeRoboter.benutze("Akku");
        legeRoboter.fahreInsStockwerk(2);
        legeRoboter.dreheRechts();
        legeRoboter.einsVor();
        legeRoboter.einsVor();
        
        sprengRoboter1.holeAufzug();
        sprengRoboter2.dreheUm();
        sprengRoboter2.einsVor();
        aufzugRoboter.holeAufzug();
        sprengRoboter2.einsVor();
        sprengRoboter1.holeAufzug();
        sprengRoboter1.dreheUm();
        while(!sprengRoboter1.istAufGegenstand("Aufzug"))sprengRoboter1.einsVor();
        aufzugRoboter.holeAufzug();

      
    }
    /*#
     * Einsatz 10:
     */

    public void einsatz10() {
        roboter1.holeAufzug();
        AB10 r = roboter3;
        r.laufeBisWand();
        r.fahreAufzug(4,true);
        r.dreheLinks();
        r.geheSchritte(3);
        r.benutze("Bombe");

        for(int i=0; i<3; i++) {
            while(r.einsVorSammle());
            r.dreheUm();
        }
        r.dreheLinks();
        if(r.einsVorSammle()) {
            r.dreheRechts();
            for(int i=0; i<4; i++) {
                while(r.einsVorSammle());
                r.dreheUm();
            }
        } else {
            r.dreheRechts();
        }
        r.benutze("Bombe");
        for(int i=0; i<2; i++) {
            while(r.einsVorSammle());
            r.dreheUm();
        }
        r.dreheLinks();
        if(r.einsVorSammle()) {
            r.dreheRechts();
            for(int i=0; i<2; i++) {
                while(r.einsVorSammle());
                r.dreheUm();
            }
        }

        roboter1.holeAufzug();
        r = roboter2;
        r.ablegen("Bombe");
        r.laufeBisWand();
        r.fahreAufzug(8,true);
        r.dreheRechts();
        r.geheSchritte(3);
        roboter1.dreheUm();
        roboter1.einsVor();
        roboter1.aufnehmen();
        roboter1.benutze("Bombe");
        for(int j=0; j<4; j++) {
            for(int i=0; i<2; i++) {
                while(roboter1.einsVorSammle());
                roboter1.dreheUm();
            }
            roboter1.dreheRechts();
            roboter1.einsVorSammle();
            roboter1.dreheLinks();
        }

        r.benutze("Bombe");
        for(int i=0; i<6; i++) {
            while(r.einsVorSammle());
            r.dreheUm();
        } 

    }

    /*#
     * -------------------------------------------------------------------
     * Bitte so lassen - diese Methode wird nur von euren Lehrer verwendet
     */
    public void nehmeKontaktAuf() {
        List<AB9> l9 = ((RoboterWelt)getWorld()).getObjects(AB9.class);
        if (l9.size()>0) {
            aufzugRoboter = l9.get(0);
            sprengRoboter1 = l9.get(1);
            sprengRoboter2 = l9.get(2);
            legeRoboter = l9.get(3);
        }
        List<AB10> l10 = ((RoboterWelt)getWorld()).getObjects(AB10.class);
        if (l10.size()>0) {
            roboter1 = l10.get(0);
            roboter2 = l10.get(1);
            roboter3 = l10.get(2);
        }
    }
}
