#pragma once

#include <Array.h>
#include "Variablen.h"

class VarPointer;

enum EreignisTyp
{
    AUSLOESER_RUNNED, // "Betroffener Ausl�ser"
    BARIERE_SWITCHED, // "Betroffene Bariere"
    BARIERE_WIRD_VERSCHOBEN, // "Betroffene Bariere", "Status"
    BASIS_BESITZERWECHSEL, // "Betroffene Basis", "Vorheriges Team", "N�chstes Team"
    DROP_AKTION, // "Betroffener Drop"
    GEGENSTAND_DROPED, // "Betroffener Gegenstand"
    INITIALISIERUNG, //
    SCHALTER_AKTIVIERT, // "Betroffener Schalter"
    SPIELER_BENUTZT_GEGENSTAND, // "Betroffener Spieler", "Betroffener Gegenstand"
    SPIELER_KEY_PRESSED, // "Betroffene Taste", "Ausf�hrender Spieler"
    SPIELER_BEKOMMT_ERFAHRUNG, // "Betroffer Spieler", "Wert"
    SPIELER_BEKOMMT_GEGENSTAND, // "Betroffener Spieler", "Betroffener Gegenstand", "Anzahl"
    SPIELER_KEY_RELEASED, // "Betroffene Taste", "Ausf�hrender Spieler"
    SPIELER_LEVEL_UP, // "Betroffer Spieler"
    SPIELER_MACHT_SCHADEN, // "Betroffer Spieler", "Wert"
    SPIELER_NIMMT_SCHADEN, // "Betroffer Spieler", "Wert"
    SPIELER_STIRBT, // "Betroffer Spieler"
    SPIELER_WIEDERBELEBT, // "Betroffer Spieler"
    SPIELER_WIRD_GEHEILT, // "Betroffer Spieler", "Wert"
    TIMER_RUNNS_OUT, // "Betroffener Timer"
    TIMER_BEGINNT, // "Betroffener Timer"
    TUNNEL_BENUTZT, // {"Betroffes Geschoss", "Betroffer Spieler"}, "Betroffer Tunnel"
    UMLENKUNG_LENKT_UM // "Betroffes Geschoss", "Betroffe Umlenkung"
};

class Ereignis
{
private:
    EreignisTyp typ;
    RCArray< VarPointer > params;
    int ref;

public:
    Ereignis( EreignisTyp typ );
    ~Ereignis();
    EreignisTyp getTyp() const;
    void addParameter( const char *name, Variable *var );
    Variable *getParameter( const char *name ) const;
    Variable *zParameter( const char *name ) const;
    Ereignis *getThis();
    Ereignis *release();
};