//---------------------------------------------------------------------------

#ifndef GLFormH
#define GLFormH
//---------------------------------------------------------------------------

#include <Forms.hpp>
#include <ExtCtrls.hpp> //Timer

#include <gl.h>
#include <glu.h>

void GL_Kolor(TColor kolor)
{
   glColor3f(GetRValue(kolor)/255.0f,GetGValue(kolor)/255.0f,GetBValue(kolor)/255.0f);
}

class TGLForm : public TForm
{
__published:
   __property bool ObslugaMyszy = {read=KameraKontrolaMysza,write=KameraKontrolaMysza};
   __property TColor KolorTla = {read=kolorTla,write=UstawKolorTla};
   __property float NatezenieSwiatlaOtoczenia = {read=natezenie_swiatla_otoczenia,write=UstawNatezenieSwiatlaOtoczenia};
   __property bool NieruchomyPokoj = {read=pudlo,write=pudlo};
   __property TColor NieruchomyPokoj_Kolor = {read=pudlo_kolor,write=pudlo_kolor};
   __property bool Mgla = {read=CzyMgla,write=UstawMgla};
   __property bool Teksturowanie = {read=teksturowanie,write=teksturowanie};
   __property bool SwobodneObroty = {read=SzybkoscWlaczone,write=SzybkoscWlaczone};
	__property float SwobodneObrotyWygaszanie = {read=SzybkoscWygaszania,write=SzybkoscWygaszania};
private:	//prywatne pola i metody zwiazane z OpenGL
   HDC uchwytDC; //uchwyt do "display device context (DC)"
   HGLRC uchwytRC; //uchwyt do "OpenGL rendering context"
   bool GL_UstalFormatPikseli(HDC uchwytDC);
   void GL_UstawienieSceny();
   TColor kolorTla;
   void __fastcall UstawKolorTla(TColor kolorTla);
   void __fastcall WndProc(TMessage& Message);
   //kamera
   bool KameraKontrolaMysza;
   int X0,Y0;
   float KameraPhi, KameraTheta, KameraR;
   float tmpKameraPhi, tmpKameraTheta;
   float KameraX, KameraY;
   float tmpKameraX, tmpKameraY;
   void __fastcall DebugInfo();
   //swobodne obroty kamery
   int SzybkoscX0,SzybkoscY0;
   float SzybkoscPhi, SzybkoscTheta;
   bool SzybkoscWlaczone;
   TTimer* SzybkoscTimer;
   void __fastcall SzybkoscTimerTimer(TObject* Sender);
   float SzybkoscWygaszania;
   //oswietlenie
   float natezenie_swiatla_otoczenia;
   void __fastcall UstawNatezenieSwiatlaOtoczenia(float NatezenieSwiatlaOtoczenia);
   //tryb pseudopelnoekranowy
   bool maksymalizacjaOkna;
   void __fastcall Pudlo(float krawedz,float glebokosc) const;
   bool pudlo;
   TColor pudlo_kolor;
   bool __fastcall CzyMgla();
   void __fastcall UstawMgla(bool mgla);
   bool teksturowanie;
protected:
   bool debug_mode;
   virtual void __fastcall GL_RysujScene();
   virtual void __fastcall RysujScene() = 0; //abstrakcyjna, musi byc zdefiniowana w klasie potomnej
   virtual void __fastcall Pomoc(); //mozna zastapic te metoda inna
   void __fastcall Obracaj(float SzybkoscPhi,float SzybkoscTheta,float SzybkoscWygaszania);
   bool rysowanieOsi;
   void __fastcall RysujOsie(float rozmiar);
   virtual void __fastcall GL_Oswietlenie();
   virtual void __fastcall Oswietlenie(){}; //mozna nadpisac i dodac zrodla swiatla
   void __fastcall MaksymalizujPrzywroc();
public:
   __fastcall TGLForm(TComponent* Owner);
   __fastcall ~TGLForm();
};

#endif

