Trigger.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include <Array.h>
  3. #include "Ereignis.h"
  4. #include "Aktionen.h"
  5. using namespace Framework;
  6. class TriggerRun;
  7. class Spiel;
  8. class VarPointer
  9. {
  10. private:
  11. Variable *var;
  12. Text name;
  13. int ref;
  14. public:
  15. VarPointer( const char *name, Variable *var );
  16. ~VarPointer();
  17. Text *zName() const;
  18. void setVariable( Variable *var );
  19. Variable *getVariable() const;
  20. Variable *zVariable() const;
  21. operator Variable *( ) const;
  22. VarPointer *getThis();
  23. VarPointer *release();
  24. };
  25. class Bedingung
  26. {
  27. private:
  28. Aktion *expression;
  29. int ref;
  30. public:
  31. Bedingung( Aktion *expression );
  32. ~Bedingung();
  33. void setExpression( Aktion *expr );
  34. bool check( Spiel *zSpiel, Ereignis *zEreignis );
  35. Bedingung *getThis();
  36. Bedingung *release();
  37. };
  38. class Trigger : public Variable
  39. {
  40. private:
  41. static int nextId;
  42. int id;
  43. Text name;
  44. int ereignisAnzahl;
  45. EreignisTyp *ereignisse;
  46. RCArray< Bedingung > *bedingungen;
  47. RCArray< Aktion > *aktionen;
  48. public:
  49. Trigger( const char *name, int ereignisAnzahl, EreignisTyp *ereignisse, RCArray< Bedingung > *bedingungen, RCArray< Aktion > *aktionen );
  50. ~Trigger();
  51. int getAktionAnzahl() const;
  52. Aktion *zAktion( int index ) const;
  53. Aktion *getAktion( int index ) const;
  54. // prüft ob der auslöser von einem bestimmten ereignis ausgelößt wird
  55. bool wirdGetriggertVon( EreignisTyp typ ) const;
  56. // return: 0, falls die bedingungen nicht erfüllt sind
  57. TriggerRun *runTrigger( Ereignis *e, Spiel *zSpiel );
  58. };
  59. class TriggerRun
  60. {
  61. private:
  62. Trigger *trigger;
  63. Ereignis *ereignis;
  64. Spiel *spiel;
  65. int programCounter;
  66. double waitCount;
  67. int ref;
  68. public:
  69. TriggerRun( Trigger *trig, Ereignis *e, Spiel *spiel );
  70. ~TriggerRun();
  71. // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist
  72. bool runNext( double t );
  73. TriggerRun *getThis();
  74. TriggerRun *release();
  75. };