Trigger.h 2.6 KB

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