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;
}
}