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

/**
 * Write a description of class AB5 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class AB5 extends Roboter
{
    /*#
     * Aufgabe 1, 2, 3 und 10: Upgrade 1 - ein neuer Sensor wird erstellt
     */
    public boolean istFassVorne() {
        // Aufgabe 3a

        if (istVorne("Fass") || istVorne("Atommuell")) {
            // Aufgabe 3b

            return true;
        } else {
            // Aufgabe 3b

            return false;
        }
        // Aufgabe 3c

    }

    /*#
     * Aufgabe 4: Rueckspiegel
     */
    private boolean istFassHinten() {
        dreheUm();
        if (istVorne("Fass")) {
            dreheUm();
            return true;
        }else {
            dreheUm();
            einsVor();
            return false;
        }

    }

    /*#
     * Aufgabe 5: Out of Power
     */
    public boolean istEnergieSchwach() {
        if (getEnergie()<40) {
            return true;
        } else {
            return false;
        }
    }

    /*#
     * Aufgabe 6: Heavy Duty
     */
    public boolean istSchwerBeladen() {
        if (getAnzahl() >= 5) {
            return true;
        }else {
            return false;
        }
    }

    /*#
     * Aufgabe 7 und 11: Look Ahead - Upgrade 2
     */
    public boolean istVorFassFrei() {
        if (istEnergieSchwach() && getAnzahl("Akku")>0) {
            benutze("Akku");
        }

        dreheRechts();
        einsVor();
        dreheLinks();
        einsVor();
        if (istWandVorne()) {
            dreheUm();
            einsVor();
            dreheRechts();
            einsVor();
            dreheRechts();
            return false;
        } else {
            einsVor();
            dreheLinks();
            if (istWandVorne() || istFassVorne()) {
                dreheLinks();
                einsVor();
                einsVor();
                dreheRechts();
                einsVor();
                dreheRechts();
                return false;
            } else {
                dreheLinks();
                einsVor();
                einsVor();
                dreheRechts();
                einsVor();
                dreheRechts();
                return true;
            }
        }
    }

    /*#
     * Aufgabe 8: Aufraeumen
     */
    public void schiebeFassBisWand() {
        while (istVorFassFrei()) {
            einsVor();
        }
    }

    /*#
     * Aufgabe 9: Fuehrerschein
     */
    public boolean istKreuzung() {
        if (!(istWandVorne()) && !(istWandLinks()) && !(istWandRechts())) {
            return true;
        }else {
            return false;
        }
    }

    public void geheBisKreuzung() {
        while(!istKreuzung()) {
            einsVor();
        }
    }

    /*#
     * Aufgabe 12: Wie koennte man diese Methode nennen?
     */
    public void schiebeEcke() {
        schiebeFassBisWand();
        dreheLinks();
        einsVor();
        dreheRechts();
        einsVor();
        dreheRechts();
        schiebeFassBisWand();
    }

    /*#
     * Einsatz 5: Bitte den Namen nicht aendern!
     */
    public void einsatz5() {
        geheBisKreuzung();
        einsVor();
        while (!istWandVorne()) {
            aufnehmen();
            einsVor();
        }
        aufnehmen();
        dreheUm();
        geheBisKreuzung();
        dreheRechts();
        while(!istWandVorne()) {
            einsVor();
            dreheRechts();
            if (istFassVorne()) {
                schiebeFassBisWand();
                dreheUm();
                laufeBisWand();
                dreheRechts();
            } else {
                dreheLinks();
            }
        }
        dreheLinks();
        dreheLinks();
        geheBisKreuzung();
        einsVor();
        einsVor();
        einsVor();
        einsVor();
        einsVor();
        dreheLinks();
        while (!istFassVorne()) {
            einsVor();
        }
        schiebeEcke();
        dreheUm();
        laufeBisWand();
        dreheLinks();
        laufeBisWand();
        dreheRechts();
        einsVor();
        dreheRechts();
        while (!istFassVorne()) {
            einsVor();
        }
        schiebeEcke();
    }

    public void laufeBisWand() {
        while(!istWandVorne()) {
            einsVor();
        }
    }
}