#ifndef OBRAZ_TERENU
#define OBRAZ_TERENU
/* plik zawiera deklaracje klas wedlug hierarchi:
    |-ObrazTerenu   -- abstrakcyjna klasa
      |-ObrazTerenuDomyslny
          |-ObrazTerenuDomyslnyAnimowany
      |-ObrazTerenuZPixmapy
          |-ObrazTerenuZPixmapyAnimowany.
Sa to klasy obiektow bedacych wizualizacja poszczegolnych rodzajow terenow.

  ObrazTerenuDomyslny w konstruktorze dostaje sekwecje klatek z rysunkami.
Wybiera losowo jedna i ja wyswietla ze stopniem glebokosci (os z) zdefiniowanym
w stale_ObrazPlanszy, a charakterystycznym dla danego terenu.

  ObrazTerenuDomyslnyAnimowany dziedziczy z ObrazuTerenuDomyslnego.
Z sekwencji klatek z rysunkami, ktora dostaje w konstruktorze wybiera klatke 
o nr 0 jako stala (tlo - stopien glebokosci (os z) charakterystyczny dla danego
terenu) reszta klatek jest uzywana do animacji. Stopien glebokosci animacji
(os z) jest w stosunku do tla zwiekszony o os z Leminga (tzn. Z_LEM).

   ObrazTerenuZPixmapy dostaje qpixmape calej planszy i z niej wycina rysunek
przynalezny sobie. Na rysunek moze byc nalozona dodatkowo maska (np.strzepiaca,
schody). Domyslnie jest tylko pobierana maska odpowiadajaca fragmentowi
wycietej pixmapy.   

    ObrazTerenuZPixmapyAnimowany dostaje dodatkowo sekwencje klatek animacji.
Dziala podobnie jak ObrazPlanszyDomyslnyAnimowany z ta roznica ze jako tlo
jest wczytywany odpowiedajacy fragment z zadanej pixmapy. Animacja o nr 0 jest
pomijana. */    

class ObrazTerenu;

#ifndef OBRAZ_PLANSZY_ABS
#include "naglowki/ObrazPlanszyAbs.h"
#endif

#ifdef ANIMACJA_WYBIURCZA
#define SITO  2   /* okresla z jaka czestotliwascia ma sie animowac teren co ile wywolan*/
#else
#define SITO  1     
#endif

class ObrazTerenu : public QObject {
 Q_OBJECT
public:
     ObrazTerenu(){};
     ~ObrazTerenu(){};
public slots:
    virtual void rysujSie(){};   
};

class ObrazTerenuDomyslny : public ObrazTerenu {
 Q_OBJECT
public:
     ObrazTerenuDomyslny (){};
     ObrazTerenuDomyslny (Para,QwSpritePixmapSequence*,typ_teren);
     virtual ~ObrazTerenuDomyslny (){ delete obraz;};
protected:
    QwSprite *obraz;      /* sprite terenu */
    Para   wspPlanszy;    /* wspolrzedne terenu na planszy */
    QPoint wspObrazu;     /*  - || - ekranu graficznego */
    int liczba_klatek;
};

class ObrazTerenuDomyslnyAnimowany : public ObrazTerenuDomyslny {
 Q_OBJECT
public:
     ObrazTerenuDomyslnyAnimowany (){};
     ObrazTerenuDomyslnyAnimowany (Para,QwSpritePixmapSequence*,typ_teren);
     virtual ~ObrazTerenuDomyslnyAnimowany (){ delete animacja; disconnect(this);};
public slots:                                                  
    virtual void rysujSie();   
protected:
     QwSprite *animacja;
};

class ObrazTerenuZPixmapy : public ObrazTerenu {
 Q_OBJECT
public:
     ObrazTerenuZPixmapy (){};
     ObrazTerenuZPixmapy (Para,QPixmap*,typ_teren,QPixmap* maska=0);
     virtual ~ObrazTerenuZPixmapy (){ delete obraz;};
protected:
    void stworzSwojObrazZ(QPixmap* rysunek,typ_teren teren,QPixmap* maska=0);
    QwSprite *obraz;
    Para   wspPlanszy;    /* wspolrzedne terenu na planszy */
    QPoint wspObrazu;     /*  - || - ekranu graficznego */
};

class ObrazTerenuZPixmapyAnimowany : public ObrazTerenuZPixmapy {
 Q_OBJECT
public:
     ObrazTerenuZPixmapyAnimowany (Para,QPixmap*,QwSpritePixmapSequence* anim,typ_teren,QPixmap* maska=0,int sit=SITO);
     virtual ~ObrazTerenuZPixmapyAnimowany (){ delete animacja;disconnect(this);};
public slots:
    virtual void rysujSie();   
protected:
    QwSprite *animacja;
    int liczba_klatek;
    int sito;       /* do ignorowania zmian klatek */
};
#endif