#define OBRAZ_PLANSZY_ABS /* Plik ten zawiera deklaracje klasy ObrazPlanszyAbs i klas pomocniczych: PowierzchniaPlanszy, RozaWiatrow, Obraz. !!! ObrazPlanszyAbs jest klasa abstrakcyjna !!! Odwoluje sie do klasy Plansza i ObrazTerenu. Jest odpowiedzialna za wizualizacje planszy wirtualnej, a dokladnie tylko terenow w niej opisanych (tworzy ich rysunki). Klasy dziedziczace maga na bierzaco sledzic i uaktualniac rysunek terenow. Znajduja sie tu odpowiednie narzedzia. Nalezy jedynie zdefiniowac metode odbierzImpuls (obecnie w pelni wirtualna). Obiekt z podklasy dzidziczcej z tej klasy to widget posiadajacy scroollbary, bedace RozaWiatrow (klasa zdeklarowana ponizej). Mozna w nim sledzic myszke. Autor: Michal Wiktor Zmijewski (grupa nr 5). */ #include "qwmatrix.h" #include "qevent.h" #include "libSprite/QwSpriteField.h" #include <stl.h> #include "naglowki/typy.h" #include "naglowki/stale_ElementySwiata.h" #include "naglowki/parametry.h" #include "naglowki/Plansza.h" #include "naglowki/stale_ObrazPlanszy.h" class Obraz; #include "naglowki/ObrazTerenu.h" /* powierzchnia na ktorej beda rysowane elementy swiata - sprity */ /* konstruktor dostaje nazwe pliku bedacego tlem obrazu planszy pozostale parametry sa domyslne (wewnetrze w biblitece QwSprite), ich opis znajduje sie w dokumentacji biblioteki QwSprite UWAGA: domyslnie wczytywany jako tlo jest plik TLO_PLANSZY (patrz stale_ObrazPlanszy) */ class PowierzchniaPlanszy : public QwImageSpriteField { public: PowierzchniaPlanszy(QPoint rozmiar,int chunksize=16,int maxclusters=100); PowierzchniaPlanszy(const char*,QPoint rozmiar,int chunksize=16,int maxclusters=100); void resize(int width, int height); ~PowierzchniaPlanszy(){}; }; /* definicje typow do ObrazuPlanszyAbs*/ typedef map<typ_teren,QwSpritePixmapSequence*> typ_anim_terenow; typedef map<Para,ObrazTerenu*> typ_mapa_terenu; typedef map<typ_teren,QPixmap*> typ_mapa_masek; /* deklaracja klasy ObrazPlanszyAbs */ class ObrazPlanszyAbs : public QWidget { Q_OBJECT public: ObrazPlanszyAbs(const char*,Plansza&,QWidget* parent=0,const char* name=0,WFlags f=0); ObrazPlanszyAbs(char*,char*,char*,Plansza&,QWidget* parent=0,const char* name=0,WFlags f=0); ~ObrazPlanszyAbs(); QwSpritePixmapSequence* animacja(typ_teren rodz);/* udostepnia animacje terenu rodz */ QPoint wspNaObrazie(QPoint);/* przeksztalca wzgledne wspolrzedne punktu na bezwzgledne */ private: void inicjacja(char*,char*);/* inicjator do konstruktorow */ signals: void wyswietlTeren(); void vScroll(int); void hScroll(int); public slots: virtual void odbierzImpuls()=0; virtual void odbierzImpulsPauza(){}; virtual void nieMaMyszki(){};/* gdy myszka jest poza widgetem */ void zdjecie();/* zapisuje rysunek calej planszy w pliku ../obrazki/plansza.png*/ void zdjecie(const char*);/* zapisuje rysunek calej planszy w zadanym pliku */ protected slots: void resizeEvent(QResizeEvent* event); void mouseMoveEvent(QMouseEvent*){}; void mousePressEvent(QMouseEvent*){}; void mouseReleaseEvent(QMouseEvent*){}; protected: Plansza& plansza; /* plansza wirtualna */ PowierzchniaPlanszy powierzchnia; Obraz *obraz; /* windget z rysunkiem planszy */ QPixmap *pixmapaPlanszy;/* ewentualny wczytany rysunek planszy */ typ_mapa_masek maska; /* kolekcja masek mask do terenow wczytanych z pixmapy */ typ_anim_terenow anim_terenow;/* kolekcja standardowych animacji terenow */ typ_mapa_terenu mapa_terenu;/* kolekcja obrazow terenu */ QPoint mpos;/* wspolrzedne myszki na obrazie */ void pobierzAnimacjeTerenow(QWMatrix macierzSkali,QWMatrix macierzOdbicia); /* pobiera animacje terenow i przeksztalca je wedlug macierzy */ void pobierzMaskiDlaTerenowZPixmapy(QWMatrix macierzSkali,QWMatrix macierzOdbicia); /* pobiera maski mask dla terenow z pixmapy i je przeksztalca */ QwSpritePixmapSequence* przeksztalcAnimacje(QwSpritePixmapSequence *anim, QWMatrix macierz,int liczba_klatek,int wektorX=0,int wektorY=0); /* przeksztalca sekwencje (liczba_klatek) klatek anim */ void zrobMapeTerenu(int CzyZPixmapy=0); /* tworzy kolekcje obrazow terenow */ void tworzObrazTerenu(typ_teren,Para,int CzyZPixmapy=0,int typ=1); /* tworzy obraz terenu (albo tlo terenu), jesli CzyZPixmapy=0 to tworzy obrazy domyslne terenu, wpp obrazy z pixmapy, jesli typ=1 to teren, wpp tlo terenu */ void tworzTeren(Para,int CzyZPizmapy=0); /* tworzy obraz terenu albo domyslny albo z pixmapy */ void tworzTloTerenu(Para,int CzyZPizmapy=0); /* tworzy obraz tla terenu albo domyslny albo z pixmapy */ void sprawdzTeren(); /* sprawdza czy zaszla jakas zmiana w terenie lub w tle terenu jesli tak to aktualizuje rysunek planszy (modyfikuje mape terenu)*/ };/* ObrazPlanszyAbs */ /* klasa RozaWiatrow - klasa pomocnicza wewnetrza klasy Obraz jest to windget zawierajacy "scrollbary" obrazu */ class RozaWiatrow : public QWidget { Q_OBJECT public: RozaWiatrow(QWidget* parent=0,const char* name=0, WFlags f=0); };/* RozaWiatrow */ /* klasa Obraz - wewnetrzy widget ObrazuPlanszyAbs zawierajacy powierzchnie planszy */ class Obraz : public QWidget, public QwAbsSpriteFieldView { Q_OBJECT public: Obraz(QwSpriteField* viewing=0, QWidget* parent=0, const char* name=0, WFlags f=0); ~Obraz(); virtual QRect viewArea() const; virtual bool preferDoubleBuffering() const; virtual void beginPainter(QPainter&); virtual void flush(const QRect& area); virtual void updateGeometries(); QPoint wspNaObrazie(QPoint);/* zwraca wspolrzedne bezwzgledne na rysunku planszy */ void save(); /* zapisuje rysunek calej planszy do pliku ../obrazki/plansza.png*/ void save(const char*);/* ---- || --- do zadanego pliku */ signals: void mousePress(QMouseEvent*); void mouseMove(QMouseEvent*); void mouseRelease(QMouseEvent*); protected: virtual void paintEvent(QPaintEvent *); virtual void resizeEvent(QResizeEvent *); void mousePressEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); virtual int hSteps() const; virtual int vSteps() const; protected slots: void vScroll(int); void hScroll(int); void _vScroll(int); /* przesuwa w pionie wyswietlany fragment o zadana ilosc */ void _hScroll(int); /* przesuwa w poziomie wyswietlany fragment */ private: QPixmap offscr; RozaWiatrow *roza; QScrollBar hscroll; QScrollBar vscroll; int vscrpv; int hscrpv; };/* Obraz */