#ifndef Editor_H
#define Editor_H

#include "../../../../Klient/Include/EditorV.h"
#include "Interface.h"
#include "EditorKlient.h"
#include "Dialog.h"
#include "EditorKarte.h"
#include <Kamera2D.h>

namespace Editor
{
    class SMWEditor : public EditorV
    {
    private:
        enum Status
        {
            START,
            SITZUNG_FRAGE,
            INITIALIZED,
            WARTEND,
            EXIT
        };
        Status status;
        Schrift *schrift;
        EditorKlient *klient;
        Animation2D *laden;
        Interface *i;
        Array< Dialog* > *dialogs;
        Critical c;
        Punkt windowSize;
        SpielerTeamStruktur *sts;
        KarteDaten *daten;
        Kamera2D *kamera;
        Kamera2D *minimap;
        Punkt maus;
        EditorObject *moveObj;
        EditorObject *rotObj;
        unsigned char alpha;
        bool rend;
        int ref;

        void ladeKarte();

    public:
        // Konstruktor
        SMWEditor();
        // Destruktor
        ~SMWEditor();
        // nicht constant
        void addDialog( Dialog *d );
        void setSchrift( Schrift *schrift ) override;
        void setKlient( KSGClient::EditorServerClient *ekv ) override;
        void setLadeAnimation( Animation2D *la ) override;
        void setSichtbar() override;
        void doPublicMausEreignis( MausEreignis &me ) override;
        void doTastaturEreignis( TastaturEreignis &te ) override;
        bool tick( double z ) override;
        void render( Bild &zRObj ) override;
        // constant
        bool hatVerlassen( bool jetzt ) const override;
        // Reference Counting
        EditorV *getThis() override;
        EditorV *release() override;
    };
}

#endif