#ifndef SpielObjekt_H
#define SpielObjekt_H

#include <Vec2.h>
#include <Model2D.h>
#include "../Team/Team.h"
#include "../Karte/Strukturen.h"
#include <TextFeld.h>
#include <Welt2D.h>
#include "../Schuss/Laser.h"
#include "../Spieler/DeadPlayer.h"

using namespace Framework;

class SpielObjekt : public Model2DObject
{
private:
    struct ObjektDataSave
    {
        float rSpeed;
        Vertex pos;
        Vertex speed;
        float rotation;
        bool amLeben;
        double akkuAbk;
        double repAbk;
        double energie;
        double stabilit�t;
        double reparatur;
        double akkuLeistung;
        double maxEnergie;
        double maxStabilit�t;
        int level;
    } last;
	int id;
	int style;
	double stabilit�t;
	double energie;
    double maxStabilit�t;
    double maxEnergie;
	int energieRadius;
	double reparatur;
	double akkuLeistung;
	double repAbk;
	double akkuAbk;
    bool amLeben;
    int level;
    float ep;
    float nextSkillEp;
	Team *zteam;
	TextFeld *nText;
    DeadPlayer *deadPlayer;

public:
	// Konstruktor
	SpielObjekt( ObjektStr *zStr, Schrift *zSchrift );
	// Destruktor
	~SpielObjekt();
	// nicht constant
	void setTextur( Bild *textur );
	void setTeam( Team *zTeam );
	bool tick( const WeltInfo &info, double zeit ) override;
	void render( Mat3<float> &kamMat, Bild &zRObj, const char *kamName ) override;
    void nimmSchaden( double &intensity, int sLevel );
    void addEp( float ep );
    DeadPlayer *sterben();
    void calcDeadPlayerObject( Laser *zSchuss );
    void save();
    void load();
	// constant
	Team *zTeam() const;
    bool doesShotAddEp() const;
    int getLevel() const;
    int getObjektId() const;
};

#endif