#ifndef KarteAuswahl_H
#define KarteAuswahl_H

#include <Klient.h>
#include <Bild.h>
#include <Knopf.h>
#include <Thread.h>
#include <KSGScript.h>

using namespace Framework;
using namespace KSGScript;

class KarteDaten : public Thread
{
private:
	int karteId;
	Schrift *schrift;
	Bild *hintergrund;
    HINSTANCE ksgs;
	KSGScriptObj *beschreibung;
	LRahmen *rahmen;
	double tickVal;
	int animation;
	bool ausgewählt;
	Punkt pos;
	Punkt gr;
	int geladen;
	int aktion;
	AlphaFeld *auswahl;
	unsigned char auswAlpha;
	bool erlaubt;
	bool rend;
    unsigned char tAlpha;
    unsigned char alpha;
	int ref;

public:
	// Konstruktor
	KarteDaten( Schrift *zSchrift, int id );
	// Destruktor
	~KarteDaten();
	// nicht constant
	virtual void thread();
	void updateErlaubt();
    void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal );
	void setSichtbar( bool sichtbar );
	void setSichtbar();
	void setAuswahl( bool auswahl );
	void setPosition( int lPos );
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void render( Bild &zRObj );
	// constant
	int getKarteId() const;
	bool istausgewählt() const;
	// Reference Counting
	KarteDaten *getThis();
	KarteDaten *release();
};

class KarteAuswahlFenster : private Thread
{
private:
	int anzahl;
	int auswahl;
	RCArray< KarteDaten > *members;
	LRahmen *rahmen;
	Schrift *schrift;
	double tickVal;
	int animation;
	Punkt pos;
	Punkt gr;
	int spielId;
	int seite;
	bool rend;
    unsigned char alpha;
	int ref;

public:
	// Konstruktor
	KarteAuswahlFenster( Schrift *zSchrift );
	// Destruktor
	~KarteAuswahlFenster();
	// nicht constant
	void setSpielId( int spielId );
	void setSichtbar( bool sichtbar );
	void blättern( bool oben );
	void updateListe();
	virtual void thread();
	bool tick( double tickVal );
	void doMausEreignis( MausEreignis &me );
	void render( Bild &zrObj );
	// constant
	int getAnzahl() const;
	int getSeiteAnzahl() const;
	int getSeite() const;
	int getAnzahlAufSeite() const;
	bool hatAuswahl() const;
	KarteDaten *getAuswahl() const;
	// Reference Counting
	KarteAuswahlFenster *getThis();
	KarteAuswahlFenster *release();
};

#endif