#ifndef Spieler_H
#define Spieler_H

#include "Klient.h"
#include <Bild.h>

class Spieler
{
private:
	int accountId;
	int sNum;
	int team;
	int spielerFarbe;
	int teamFarbe;
	double xPos;
	double yPos;
	double xSpeed;
	double ySpeed;
	double kurve;
	int radius;
	bool amLeben;
	bool lKurve;
	bool rKurve;
	double spielZeit;
	double todesZeit;
	bool linieUnterbrochen;
	double nLUChange;
	double lUStrength;
	int punkte;
	int rundenGewonnen;
	int linienLength;
	double zeitAmLeben;
	double zeitTod;
	int kills;
	int tode;
	int killFarbe;
	Array< int > *rundenLinienLength;
	Array< int > *rundenKills;
	Array< int > *rundenTodesZeit;
	int rundenNummer;
	Klient *klient;
	int ref;

public:
	// Konstruktor
	Spieler();
	// Destruktor
	~Spieler();
	// nicht constant
	void offline();
	void online( SSKlientV *zKlient );
	void neuRunde( bool amLeben );
	void setAccountId( int id );
	void setSpielerNummer( int sNum );
	void setTeam( int team );
	void setSpielerFarbe( int farbe );
	void setTeamFarbe( int farbe );
	void setGeschwindigkeit( double xSpeed, double ySpeed );
	void setPosition( double x, double y );
	void setWendigkeit( double kurve );
	void setSize( int radius );
	void setKlient( Klient *klient );
	void setLKurve( bool lK );
	void setRKurve( bool rK );
	void setLinienUnterbrechungsStrength( double uS );
	void addPunkte( int p );
	void addKill();
	void tick( Bild *zMap, double zeit );
	// constant
	Klient *zKlient() const;
	int getSpielerNummer() const;
	int getSpielerFarbe() const;
	int getSpielerTeam() const;
	int getTeamFarbe() const;
	double getX() const;
	double getY() const;
	double getSpeedX() const;
	double getSpeedY() const;
	double getKurve() const;
	bool istAmLeben() const;
	int getAccountId() const;
	double getTodesZeit() const;
	bool linieIstUnterbrochen() const;
	int getPunkte() const;
	bool istOnline() const;
	int getKillFarbe() const;
	int getRundenGewonnen() const;
	int getLinienLength() const;
	int getZeitAmLeben() const;
	int getZeitTod() const;
	int getKills() const;
	int getTode() const;
	int getLinienLength( int runde ) const;
	int getKills( int runde ) const;
	int getTodesZeit( int runde ) const;
	bool machtKurve( bool rechts ) const;
	// Reference Counting
	Spieler *getThis();
	Spieler *release();
};

#endif