Trigger.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. int id;
  42. Text name;
  43. int ereignisAnzahl;
  44. EreignisTyp *ereignisse;
  45. RCArray< Bedingung > *bedingungen;
  46. RCArray< Aktion > *aktionen;
  47. public:
  48. Trigger( int id, const char *name, int ereignisAnzahl, EreignisTyp *ereignisse, RCArray< Bedingung > *bedingungen, RCArray< Aktion > *aktionen );
  49. ~Trigger();
  50. bool hatEreignis( EreignisTyp typ ) const;
  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. int getId() const;
  59. };
  60. class TriggerRun
  61. {
  62. private:
  63. Trigger *trigger;
  64. Ereignis *ereignis;
  65. Spiel *spiel;
  66. int programCounter;
  67. double waitCount;
  68. int ref;
  69. public:
  70. TriggerRun( Trigger *trig, Ereignis *e, Spiel *spiel );
  71. ~TriggerRun();
  72. // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist
  73. bool runNext( double t );
  74. Trigger *getTrigger() const;
  75. TriggerRun *getThis();
  76. TriggerRun *release();
  77. };