#ifndef OBRAZ_ELEMENTU_SWIATA
#define OBRAZ_ELEMENTU_SWIATA
/* Plik ten zawiera deklaracje klas odpowiedzialnych za wizualizacje
elementow swiata. Obiekty tych klas zarzadzaja spritami opowiadajcymi
zadanym elementom swiata.
Hierarchia klas:
-ObrazElementuSwiata
|-ObrazLeminga
| |-ObrazBlokera
| |-ObrazPracujacego
| | |-ObrazPijusa
| | |-ObrazSchodkarza
| | | -ObrazSchodkarzaGornego
| | | -ObrazSchodkarzaDolnego
| | | -ObrazSchodkarzaPoziomego
| | |-ObrazKopacza
| | -ObrazKopaczaPoziomego
| | -ObrazKopaczaPionowego
| | -ObrazKopaczaSkonsegoWGore
| | -ObrazKopaczaSkosnegoWDol
|-ObrazWejscioWyjscia
| -ObrazWyjscia
| -ObrazWejscia
|-ObrazBomby;
W konstruktorach podaje sie wskaznik na opowiadajacy element swiata,
i wskaznik na ObrazPlanszy. W przypadku braku pierwszego parametru jest
przyjmowany tryb tzw. kursora tzn. bedzie wyswietlany sprit obrazujacy
dany element i bedzie nastepowala zmiana klatek lecz za kazdym razem
trzeba mu podac wspolrzedne wyswietlania naogol wspolrzedne kursora
myszki w przypadku braku wspolrzednych element stoi w miejscu.
W trybie zwyklym kazdy obiekt otrzymawszy sygnal na slot rysujSie()
odczyta potrzebne informacje od odpowiadajacego mu elementu swiata takie jak:
stan, zwrot_nosa, liczba_impulsow, licznik_impulsow, zapas sil i dobierze
odpowiedni rysunek w odpowiednim miejscu na ekranie.
Autor: Michal Wiktor Zmijewski (grupa nr 5)
*/
class ObrazElementuSwiata;
class ObrazLeminga;
#ifndef OBRAZ_PLANSZY
#include "naglowki/ObrazPlanszy.h"
#endif
class ObrazElementuSwiata : public QObject {
Q_OBJECT
public:
ObrazElementuSwiata():obraz(0),zwrot(0){};
ObrazElementuSwiata(ObrazPlanszy* plansza):obrazPlanszy(plansza),obraz(0),zwrot(0){};
virtual ~ObrazElementuSwiata(){ delete obraz;};
virtual void pokazSie(QPoint,QPoint){};
virtual void pokazSie(){};
virtual void odwrocSie(){};
int podajZwrot(){ return zwrot; };
virtual QPoint podajSrodek(QPoint p){ return p;};
public slots:
virtual void rysujSie()=0;
protected:
ObrazPlanszy* obrazPlanszy; /* wskaznik na ObrazPlanszy zarzadce */
QwSprite *obraz; /* sprite - elementu */
int liczba_klatek;
unsigned int stan;
int zwrot;
QPoint wspl;
virtual void pobierzAnimacje(int,typ_rodzaj);/* pobiera animacje elementu w stanie */
virtual void wyliczSwojaPozycje(float wspol=1){};/* wylicza pozycje elemntu wynikajaca
ze wspolczynnika wspol bedacego wartoscia funkcji od licznika_impulsow i liczby_impulsow*/
};
/* OBRAZ LEMINGA */
class ObrazLeminga : public ObrazElementuSwiata {
Q_OBJECT
public:
ObrazLeminga(){}; // tryb kursora
ObrazLeminga(Leming *lem,ObrazPlanszy *obraz);
ObrazLeminga(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazLeminga(){};
virtual void pokazSie(QPoint,QPoint);/* kaze wyswietlic kursor w pozycji */
/* UWAGA !! funkcja scisle uzalezniona od obrazu planszy i jej trybu pracy */
virtual void pokazSie();/* kaze zmienic klatke kursora */
virtual void odwrocSie();/* odwraca Leminga tzn. pobiera klatki odwroconego */
virtual QPoint podajSrodek(QPoint);/* podaje srodek bitmapy leminga */
protected:
enum { kursor, zwykly } tryb;
Leming* leming;
Para pozycja;
void inicjacjaKursora();
void wyliczSwojaPozycje(float wspol=1);
void pobierzAnimacje(int nr,typ_rodzaj kto=LEMING)
{ ObrazElementuSwiata::pobierzAnimacje(nr,kto);}
virtual void narysujSie(typ_rodzaj kto=LEMING);
public slots:
virtual void rysujSie();
};
/* OBRAZ BLOKERA */
class ObrazBlokera : public ObrazLeminga {
Q_OBJECT
public:
ObrazBlokera(Bloker *blo,ObrazPlanszy *obraz,int sit=10);
ObrazBlokera(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazBlokera(){};
void odwrocSie(){};
public slots:
virtual void rysujSie();
private:
int sito;
};
/* OBRAZ PRACUJACEGO */
class ObrazPracujacego : public ObrazLeminga {
Q_OBJECT
public:
ObrazPracujacego(KomandosPracujacy *blo,ObrazPlanszy *obraz);
ObrazPracujacego(ObrazPlanszy *obraz); // tryb kursora
~ObrazPracujacego(){};
protected:
virtual void narysujSie(typ_rodzaj kto=LEMING);
};
/* OBRAZ PIJUSA */
class ObrazPijusa : public ObrazPracujacego {
Q_OBJECT
public:
ObrazPijusa(Pijus *blo,ObrazPlanszy *obraz);
ObrazPijusa(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazPijusa(){};
void odwrocSie();
public slots:
virtual void rysujSie();
};
/* OBRAZ SCHODKARZA */
class ObrazSchodkarza : public ObrazPracujacego {
Q_OBJECT
public:
ObrazSchodkarza(Schodkarz *blo,ObrazPlanszy *obraz)
:ObrazPracujacego(blo,obraz){};
ObrazSchodkarza(ObrazPlanszy *obraz) // tryb kursora
:ObrazPracujacego(obraz){};
~ObrazSchodkarza(){};
};
/* OBRAZ SCHODKARZA GORNEGO*/
class ObrazSchodkarzaGornego : public ObrazSchodkarza {
Q_OBJECT
public:
ObrazSchodkarzaGornego(SchodkarzGorny *blo,ObrazPlanszy *obraz);
ObrazSchodkarzaGornego(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazSchodkarzaGornego(){};
void odwrocSie();
public slots:
void rysujSie();
};
/* OBRAZ SCHODKARZA DOLNEGO*/
class ObrazSchodkarzaDolnego : public ObrazSchodkarza {
Q_OBJECT
public:
ObrazSchodkarzaDolnego(SchodkarzDolny *blo,ObrazPlanszy *obraz);
ObrazSchodkarzaDolnego(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazSchodkarzaDolnego(){};
void odwrocSie();
public slots:
void rysujSie();
};
/* OBRAZ SCHODKARZA POZIOMEGO*/
class ObrazSchodkarzaPoziomego : public ObrazSchodkarza {
Q_OBJECT
public:
ObrazSchodkarzaPoziomego(SchodkarzPoziomy *blo,ObrazPlanszy *obraz);
ObrazSchodkarzaPoziomego(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazSchodkarzaPoziomego(){};
void odwrocSie();
public slots:
void rysujSie();
};
/* OBRAZ KOPACZA */
class ObrazKopacza : public ObrazPracujacego {
Q_OBJECT
public:
ObrazKopacza(Kopacz *blo,ObrazPlanszy *obraz)
:ObrazPracujacego(blo,obraz){};
ObrazKopacza(ObrazPlanszy *obraz) // tryb kursora
:ObrazPracujacego(obraz){};
~ObrazKopacza(){};
};
/* OBRAZ KOPACZA PIONOWEGO */
class ObrazKopaczaPionowego : public ObrazKopacza {
Q_OBJECT
public:
ObrazKopaczaPionowego(KopaczPionowy *blo,ObrazPlanszy *obraz);
ObrazKopaczaPionowego(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazKopaczaPionowego(){};
void odwrocSie();
public slots:
void rysujSie();
};
/* OBRAZ KOPACZA POZIOMEGO */
class ObrazKopaczaPoziomego : public ObrazKopacza {
Q_OBJECT
public:
ObrazKopaczaPoziomego(KopaczPoziomy *blo,ObrazPlanszy *obraz);
ObrazKopaczaPoziomego(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazKopaczaPoziomego(){};
void odwrocSie();
public slots:
void rysujSie();
};
/* OBRAZ KOPACZA SKOSNEGO W GORE i W DOL */
class ObrazKopaczaSkosnegoWGore : public ObrazKopacza {
Q_OBJECT
public:
ObrazKopaczaSkosnegoWGore(KopaczSkosnyWGore *blo,ObrazPlanszy *obraz);
ObrazKopaczaSkosnegoWGore(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazKopaczaSkosnegoWGore(){};
void odwrocSie();
public slots:
void rysujSie();
};
class ObrazKopaczaSkosnegoWDol : public ObrazKopacza {
Q_OBJECT
public:
ObrazKopaczaSkosnegoWDol(KopaczSkosnyWDol *blo,ObrazPlanszy *obraz);
ObrazKopaczaSkosnegoWDol(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazKopaczaSkosnegoWDol(){};
void odwrocSie();
public slots:
void rysujSie();
};
/* OBRAZ WEJSCIOWYJSCIA */
class ObrazWejscioWyjscia: public ObrazElementuSwiata {
Q_OBJECT
public:
ObrazWejscioWyjscia(ElementSwiata *,ObrazPlanszy *);
virtual ~ObrazWejscioWyjscia(){};
protected:
Para pozycja;
ElementSwiata *element;
void wyliczSwojaPozycje(float wspol=1);
void pobierzAnimacje(int nr,typ_rodzaj kto=WEJSCIE)
{ ObrazElementuSwiata::pobierzAnimacje(nr,kto);}
virtual void narysujSie(typ_rodzaj kto=WEJSCIE);
};
/* OBRAZ WEJSCIA */
class ObrazWejscia : public ObrazWejscioWyjscia {
Q_OBJECT
public:
ObrazWejscia(Wejscie *,ObrazPlanszy *obraz);
virtual ~ObrazWejscia(){};
public slots:
void rysujSie();
};
/* OBRAZ WYJSCIA */
class ObrazWyjscia : public ObrazWejscioWyjscia {
Q_OBJECT
public:
ObrazWyjscia(Wyjscie *,ObrazPlanszy *obraz);
virtual ~ObrazWyjscia(){};
public slots:
void rysujSie();
};
/* KONIEC OBRAZU WEJSCIOWYJSCIA */
/* OBRAZ BOMBY */
class ObrazBomby : public ObrazElementuSwiata {
Q_OBJECT
public:
ObrazBomby(){}; // tryb kursora
ObrazBomby(Bomba *lem,ObrazPlanszy *obraz);
ObrazBomby(ObrazPlanszy *obraz); // tryb kursora
virtual ~ObrazBomby(){};
virtual void pokazSie(QPoint,QPoint);
virtual void pokazSie();
virtual void odwrocSie(){};/* nie moze sie odwracac */
virtual QPoint podajSrodek(QPoint);
protected:
enum { kursor, zwykly } tryb;
Bomba* bomba;
Para pozycja;
void inicjacjaKursora();
void wyliczSwojaPozycje(float wpol=1);
void narysujSie();
public slots:
virtual void rysujSie();
};
#endif