Trigger.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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 getName() 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 LocalMemory
  26. {
  27. private:
  28. RCArray< VarPointer > vars;
  29. int ref;
  30. public:
  31. LocalMemory();
  32. ~LocalMemory();
  33. void setVar( const char *name, Variable *var );
  34. Variable *getVariable( const char *name );
  35. Variable *zVariable( const char *name );
  36. LocalMemory *getThis();
  37. LocalMemory *release();
  38. };
  39. class ProgramCounter
  40. {
  41. private:
  42. Array< int > current;
  43. int depth;
  44. int ref;
  45. public:
  46. ProgramCounter();
  47. ~ProgramCounter();
  48. void stepIn();
  49. void count();
  50. void stepOut();
  51. Text getUniqueString() const;
  52. int currentPosition() const;
  53. ProgramCounter *getThis();
  54. ProgramCounter *release();
  55. };
  56. class Bedingung
  57. {
  58. private:
  59. Aktion *expression;
  60. int ref;
  61. public:
  62. Bedingung( Aktion *expression );
  63. ~Bedingung();
  64. void setExpression( Aktion *expr );
  65. bool check( Spiel *zSpiel, Ereignis *zEreignis );
  66. Bedingung *getThis();
  67. Bedingung *release();
  68. };
  69. class Trigger : public Variable
  70. {
  71. private:
  72. int id;
  73. Text name;
  74. int ereignisAnzahl;
  75. EreignisTyp *ereignisse;
  76. RCArray< Bedingung > *bedingungen;
  77. RCArray< Aktion > *aktionen;
  78. int runCount;
  79. bool aktiv;
  80. public:
  81. Trigger( int id, const char *name, int ereignisAnzahl, EreignisTyp *ereignisse, RCArray< Bedingung > *bedingungen, RCArray< Aktion > *aktionen );
  82. ~Trigger();
  83. void setAktiv( bool aktiv );
  84. bool hatEreignis( EreignisTyp typ ) const;
  85. int getAktionAnzahl() const;
  86. Aktion *zAktion( int index ) const;
  87. Aktion *getAktion( int index ) const;
  88. // return: 0, falls die bedingungen nicht erfüllt sind
  89. TriggerRun *runTrigger( Ereignis *e, Spiel *zSpiel );
  90. int getId() const;
  91. int getRuns() const;
  92. const char *getName() const;
  93. bool istAktiv() const;
  94. };
  95. class TriggerRun
  96. {
  97. private:
  98. Trigger *trigger;
  99. Ereignis *ereignis;
  100. Spiel *zSpiel;
  101. LocalMemory localMem;
  102. ProgramCounter counter;
  103. int programCounter;
  104. double waitCount;
  105. int ref;
  106. public:
  107. TriggerRun( Trigger *trig, Ereignis *e, Spiel *zSpiel );
  108. ~TriggerRun();
  109. // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist
  110. bool runNext( double t );
  111. Trigger *getTrigger() const;
  112. TriggerRun *getThis();
  113. TriggerRun *release();
  114. };