#ifndef SpielKlasse_H
#define SpielKlasse_H

#include "SpielV.h"
#include "Spieler\Spieler.h"
#include "Karte\Karte.h"
#include "Chat\Chat.h"
#include "Ende\RundenEnde.h"
#include "Ende\Ende.h"
#include "Bestenliste\Bestenliste.h"
#include "..\Netzwerk\STKNachricht.h"
#include <Bildschirm.h>

class SpielKlasse : public SpielV
{
private:
	RCArray< STKNachricht > *stkn;
	int stkna;
	Bestenliste *bestenliste;
	Schrift *schrift;
	KSGClient::InformationServerClient *infoKlient;
	KSGClient::SpielServerClient *spielKlient;
	RCArray< Spieler > *spieler;
	Bildschirm *screen;
	Karte *map;
	Kamera *kam;
	SpielChat *chat;
	RundenEnde *rEnd;
	Ende *end;
	bool rendern;
	double spielZeit;
	double rZeit;
	bool spielPause;
	int spielerAnzahl;
	int karteId;
	int spielerNummer;
	char *tasten;
	int mx;
	int my;
	int ref;
	bool istAmLeben() const;

public:
	// Konstruktor
	SpielKlasse();
	// Destruktor
	~SpielKlasse();
	// nicht constant
	void lock();
	void unlock();
	void setSchrift( Schrift *schrift ) override; // call 4
	void setBildschirm( Bildschirm *screen ) override; // call 3
	void nachricht( int l�n, char *bytes ) override;
	void setKlients( KSGClient::InformationServerClient *infoKlient, KSGClient::SpielServerClient *spielKlient ) override; // call 2
	void setKarteId( int karteId ) override; // call 1
	void ladeDaten() override; // call 5
	void doMausEreignis( MausEreignis &me ) override;
	void doTastaturEreignis( TastaturEreignis &te ) override;
	void stknVerarbeitung();
	bool tick( double zeit ) override;
	void render( Bild &zRObj ) override;
	// constant
	int l�uft() const override;
	// Reference Counting
	SpielV *getThis() override;
	SpielV *release() override;
};

#endif