#ifndef SpielLaden_H
#define SpielLaden_H

#include <Klient.h>
#include <Thread.h>
#include <Bild.h>
#include <TextFeld.h>
#include <Fortschritt.h>
#include "..\..\..\Strukturen\Strukturen.h"

using namespace Framework;

class SpielLadenListeSpieler
{
private:
	int accountId;
	TextFeld *name;
	TextFeld *team;
	TextFeld *ping;
	FBalken *fortschritt;
	LRahmen *rahmen;
	Text *teamName;
	int p;
	int spielerFarbe;
	int teamFarbe;
	bool rend;
	int ref;

public:
	// Konstruktor
	SpielLadenListeSpieler( int accountId, Schrift *zSchrift );
	// Destruktor
	~SpielLadenListeSpieler();
	// nicht constant
	void setFortschritt( int prozent );
	void setPing( int ping );
	void setTeamName( Text *zName );
	void setSpielerFarbe( int farbe );
	void setTeamFarbe( int farbe );
	bool tick( double tickVal );
	void render( int y, Bild &zRObj );
	// constant
	int getAccountId() const;
	// Reference Counting
	SpielLadenListeSpieler *getThis();
	SpielLadenListeSpieler *release();
};

class SpielLadenListe
{
private:
	int spielerAnzahl;
	int höhe;
	int breite;
	double tickVal;
	TextFeld *spielerName;
	TextFeld *spielerFarbe;
	TextFeld *teamName;
	TextFeld *teamFarbe;
	TextFeld *ping;
	TextFeld *fortschritt;
	LRahmen *rahmen;
	AlphaFeld *titel;
	RCArray < SpielLadenListeSpieler > *spieler;
	SpielerTeamStruktur *sts;
	Schrift *schrift;
	Punkt bildschirmGröße;
	unsigned char alpha;
	int animation;
	bool rend;
	int ref;

public:
	// Konstruktor
	SpielLadenListe( Schrift *zSchrift );
	// Destruktor
	~SpielLadenListe();
	// nicht constant
	void setSTS( SpielerTeamStruktur *sts );
	void setSichtbar( bool sichtbar );
	void addSpieler( int accountId, int spielerNummer );
	void setSpielerFortschritt( int accountId, int prozent );
	void setSpielerPing( int accountId, int ping );
	bool tick( double tickval );
	void render( Bild &zRObj );
	// constant
	int getHöhe() const;
	int getAlpha() const;
	// Reference Counting
	SpielLadenListe *getThis();
	SpielLadenListe *release();
};

class SpielLaden : private Thread
{
private:
	int karteId;
	Punkt bildschirmGröße;
	Bild *hintergrundBild;
	unsigned char ladenAlpha;
	unsigned char hintergrundAlpha;
	int ladenBild;
	double tickVal;
	bool geladen;
	SpielLadenListe *liste;
	int animation;
	bool ende;
	bool rend;
	int ref;

public:
	// Konstruktor
	SpielLaden( Schrift *zSchrift );
	// Destruktor
	~SpielLaden();
	// nicht constant
	void setSpielerTeamStruktur( SpielerTeamStruktur *sts );
	void setKarte( int karteId );
	void setSichtbar( bool sichtbar );
	void thread() override;
	void addSpieler( int accountId, int spielerNummer );
	void setSpielerFortschritt( int accountId, int prozent );
	void setSpielerPing( int accountId, int ping );
	bool tick( double tickVal );
	void render( Bild &zRObj );
	// constant
	int getAlpha() const;
	// Reference Counting 
	SpielLaden *getThis();
	SpielLaden *release();
};

#endif