Príloha 9 –druhá fáza tvorby triedy AnimovanýObjekt

Prevziať

public class AnimovanýObjekt extends GRobot
{
    private static AnimovanýObjekt prievozník;
 
    public static void prievozník(AnimovanýObjekt prievozník)
    {
        AnimovanýObjekt.prievozník = prievozník;
    }
 
    public static AnimovanýObjekt prievozník()
    {
        return prievozník;
    }
 
    // Fixný počet fáz animácie pri chôdzi.
    private final static int fázChôdze = 2;
 
    private Pozícia pozícia = Pozícia.pravýBreh;
    // Premenné zvuk, obrázokDoľava a obrázokDoprava budú obsahovať
    // názvy súborov podľa vnútorne dohodnutej schémy.
    private String meno, zvuk;
    private String obrázokDoľava[] = new String[1 + fázChôdze];
    private String obrázokDoprava[] = new String[1 + fázChôdze];
    private AnimovanýObjekt cieľ;
    private double posunX, posunY;
    private double ľavýX = 0, ľavýY = 0;
    private double pravýX = 0, pravýY = 0;
    private double posunPopisuX;
    private double posunPopisuY;
    private int fázaChôdze = 0; // Ak je hodnota nulová, znamená to,
                                // že objekt nie je animovaný.
 
    public AnimovanýObjekt(String meno, double posunX, double posunY,
        double posunPopisuX, double posunPopisuY)
    {
        zdvihniPero();
 
        // Inicializujem názvy súborov podľa dohody.
        obrázokDoľava[0] = "súbory/" + meno + "-ľ.png";
        obrázokDoprava[0] = "súbory/" + meno + "-p.png";
        zvuk = "súbory/" + meno + ".wav";
 
        this.meno = meno;
        this.posunX = posunX;
        this.posunY = posunY;
        this.posunPopisuX = posunPopisuX;
        this.posunPopisuY = posunPopisuY;
 
        spôsobKreslenia(KRESLI_NA_STRED);
        rýchlosť(10, false);
    }
 
    @Override public void kresliTvar()
    {
        skoč(posunX, posunY);
   
        if (vPohybe() && fázaChôdze != 0)
        {
            if (smer() >= 90 && smer() <= 270)
                obrázok(obrázokDoľava[fázaChôdze]);
            else
                obrázok(obrázokDoprava[fázaChôdze]);
        }
        else if (smer() >= 90 && smer() <= 270)
            obrázok(obrázokDoľava[0]); else obrázok(obrázokDoprava[0]);
 
        domov();
        if (myšV())
        {
            skoč(posunPopisuX, posunPopisuY);
            text(meno);
        }
    }
 
    public boolean vPohybe()
    {
        return aktívny();
    }
 
    public boolean myšV()
    {
        return myšVElipse(50, 60);
    }
 
    public boolean pravýBreh()
    {
        return pozícia == Pozícia.pravýBreh;
    }
 
    public boolean ľavýBreh()
    {
        return pozícia == Pozícia.ľavýBreh;
    }
 
    public Pozícia pozícia()
    {
        return pozícia;
    }
 
    public void nastavĽavý(double x, double y)
    {
        ľavýX = x;
        ľavýY = y;
    }
 
    public void nastavPravý(double x, double y)
    {
        pravýX = x;
        pravýY = y;
    }
 
    public void umožniAnimáciuChôdze()
    {
        for (int i = 1; i <= fázChôdze; ++i)
        {
            obrázokDoľava[i] = "súbory/" + meno + "-ľ-" + i + ".png";
            obrázokDoprava[i] = "súbory/" + meno + "-p-" + i + ".png";
        }
        fázaChôdze = 1;
    }
 
    public void choďNaĽavý()
    {
        cieľ(ľavýX, ľavýY);
        pozícia = Pozícia.ľavýBreh;
    }
 
    public void choďNaPravý()
    {
        cieľ(pravýX, pravýY);
        pozícia = Pozícia.pravýBreh;
    }
 
    public void choďNaPrievozníka()
    {
        cieľ(cieľ = prievozník);
        pozícia = Pozícia.prievozník;
    }
 
    @Override public void dosiahnutieCieľa()
    {
        cieľ = null;
    }
 
    @Override public void aktivita()
    {
        if (null != cieľ) upravCieľ(cieľ);
        // Nenulová hodnota fázy animácie znamená, že sme vykonali potrebné
        // nastavenia, aby mohol byť objekt animovaný.
        if (fázaChôdze != 0 && ++fázaChôdze > fázChôdze) fázaChôdze = 1;
    }
}