#ifndef Strukturen_H
#define Strukturen_H

#include <Model2D.h>
#include <Bild.h>
#include <Datei.h>
#include "SSDatenbankV.h"

using namespace Framework;

class RessourceStr
{
private:
	int id;
	int ref;
	Model2DData *m2d;
	Bild *bild;
	Text *pfad;

public:
	// Konstruktor
    RessourceStr( Datei *zDatei, SSDatenbankV *zDb, char *tmpPfad, int kId );
	// Destruktor
	~RessourceStr();
	// constant
	int getId() const;
	Model2DData *zReccourceM2() const;
	Bild *zReccourceTxt() const;
	// Reference Counting
	RessourceStr *getThis();
	RessourceStr *release();
};

class ObjektStr
{
private:
	int ref;

public:
	Punkt pos;
	int id;
	int m2d;
	int bild;
	int style;
	int maxStability;
	int maxEnergie;
	int energieRadius;
	double reparatur;
	double akkuLeistung;
	char team;

	// Konstruktor
	ObjektStr( Datei *zDatei );
    void save( Datei *zDatei ) const;
	// Reference Counting
	ObjektStr *getThis();
	ObjektStr *release();
};

class SpielerStr
{
private:
	int ref;

public:
	int id;
	Punkt pos;
	double rot;
	double beschleunigung;
	int maxStability;
	int maxEnergie;
	double reparatur;
	double akkuLeistung;
	int laserIntensity;
	int laserEffizienz;
	int laserTempo;
	double wendigkeit;
    double antriebEffizienz;
    double energieSchild;
    double energieSchildEffizienz;
	int netzwerk;
	int skillPunkte;
	int m2d;
	int bild;

	// Konstruktor
	SpielerStr( Datei *zDatei );
    void save( Datei *zDatei ) const;
	// Reference Counting
	SpielerStr *getThis();
	SpielerStr *release();
};

class TeamStr
{
private:
	int ref;

public:
	int id;
	int maxPunkte;
	double beschleunigung;
	int maxStability;
	int maxEnergie;
	double reparatur;
	double akkuLeistung;
	int laserIntensity;
	int laserEffizienz;
	int laserTempo;
	double wendigkeit;
    double antriebEffizienz;
    double energieSchild;
    double energieSchildEffizienz;
	int punkte;

	// Konstruktor
	TeamStr( Datei *zDatei );
    void save( Datei *zDatei ) const;
	// Reference Counting
	TeamStr *getThis();
	TeamStr *release();
};

#endif