Trigger.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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 stepInto();
  49. void count();
  50. void stepOut();
  51. int currentPosition() const;
  52. ProgramCounter *getThis();
  53. ProgramCounter *release();
  54. };
  55. class Bedingung
  56. {
  57. private:
  58. Aktion *expression;
  59. int ref;
  60. public:
  61. Bedingung( Aktion *expression );
  62. ~Bedingung();
  63. void setExpression( Aktion *expr );
  64. bool check( Spiel *zSpiel, Ereignis *zEreignis );
  65. Bedingung *getThis();
  66. Bedingung *release();
  67. };
  68. class Trigger : public Variable
  69. {
  70. private:
  71. int id;
  72. Text name;
  73. int ereignisAnzahl;
  74. EreignisTyp *ereignisse;
  75. RCArray< Bedingung > *bedingungen;
  76. RCArray< Aktion > *aktionen;
  77. public:
  78. Trigger( int id, const char *name, int ereignisAnzahl, EreignisTyp *ereignisse, RCArray< Bedingung > *bedingungen, RCArray< Aktion > *aktionen );
  79. ~Trigger();
  80. bool hatEreignis( EreignisTyp typ ) const;
  81. int getAktionAnzahl() const;
  82. Aktion *zAktion( int index ) const;
  83. Aktion *getAktion( int index ) const;
  84. // return: 0, falls die bedingungen nicht erfüllt sind
  85. TriggerRun *runTrigger( Ereignis *e, Spiel *zSpiel );
  86. int getId() const;
  87. };
  88. class TriggerRun
  89. {
  90. private:
  91. Trigger *trigger;
  92. Ereignis *ereignis;
  93. Spiel *zSpiel;
  94. LocalMemory localMem;
  95. ProgramCounter counter;
  96. int programCounter;
  97. double waitCount;
  98. int ref;
  99. public:
  100. TriggerRun( Trigger *trig, Ereignis *e, Spiel *zSpiel );
  101. ~TriggerRun();
  102. // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist
  103. bool runNext( double t );
  104. Trigger *getTrigger() const;
  105. TriggerRun *getThis();
  106. TriggerRun *release();
  107. };