#pragma once #include #include "Ereignis.h" #include "Aktionen.h" using namespace Framework; class TriggerRun; class Spiel; class VarPointer { private: Variable *var; Text name; int ref; public: VarPointer( const char *name, Variable *var ); ~VarPointer(); Text *zName() const; void setVariable( Variable *var ); Variable *getVariable() const; Variable *zVariable() const; operator Variable *( ) const; VarPointer *getThis(); VarPointer *release(); }; class Bedingung { private: Aktion *expression; int ref; public: Bedingung( Aktion *expression ); ~Bedingung(); void setExpression( Aktion *expr ); bool check( Spiel *zSpiel, Ereignis *zEreignis ); Bedingung *getThis(); Bedingung *release(); }; class Trigger : public Variable { private: static int nextId; int id; Text name; int ereignisAnzahl; EreignisTyp *ereignisse; RCArray< Bedingung > *bedingungen; RCArray< Aktion > *aktionen; public: Trigger( const char *name, int ereignisAnzahl, EreignisTyp *ereignisse, RCArray< Bedingung > *bedingungen, RCArray< Aktion > *aktionen ); ~Trigger(); int getAktionAnzahl() const; Aktion *zAktion( int index ) const; Aktion *getAktion( int index ) const; // prüft ob der auslöser von einem bestimmten ereignis ausgelößt wird bool wirdGetriggertVon( EreignisTyp typ ) const; // return: 0, falls die bedingungen nicht erfüllt sind TriggerRun *runTrigger( Ereignis *e, Spiel *zSpiel ); }; class TriggerRun { private: Trigger *trigger; Ereignis *ereignis; Spiel *spiel; int programCounter; double waitCount; int ref; public: TriggerRun( Trigger *trig, Ereignis *e, Spiel *spiel ); ~TriggerRun(); // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist bool runNext( double t ); TriggerRun *getThis(); TriggerRun *release(); };