Trigger.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. };
  57. class Trigger : public Variable
  58. {
  59. private:
  60. int id;
  61. Text name;
  62. int ereignisAnzahl;
  63. EreignisTyp *ereignisse;
  64. RCArray< Bedingung > *bedingungen;
  65. RCArray< Aktion > *aktionen;
  66. int runCount;
  67. bool aktiv;
  68. public:
  69. Trigger( int id, const char *name, int ereignisAnzahl, EreignisTyp *ereignisse, RCArray< Bedingung > *bedingungen, RCArray< Aktion > *aktionen );
  70. ~Trigger();
  71. void setAktiv( bool aktiv );
  72. bool hatEreignis( EreignisTyp typ ) const;
  73. int getAktionAnzahl() const;
  74. Aktion *zAktion( int index ) const;
  75. Aktion *getAktion( int index ) const;
  76. // return: 0, falls die bedingungen nicht erfüllt sind
  77. TriggerRun *runTrigger( Ereignis *e, Spiel *zSpiel );
  78. int getId() const;
  79. int getRuns() const;
  80. const char *getName() const;
  81. bool istAktiv() const;
  82. };
  83. class TriggerRun : public virtual ReferenceCounter
  84. {
  85. private:
  86. Trigger *trigger;
  87. Ereignis *ereignis;
  88. Spiel *zSpiel;
  89. LocalMemory localMem;
  90. ProgramCounter counter;
  91. int programCounter;
  92. double waitCount;
  93. public:
  94. TriggerRun( Trigger *trig, Ereignis *e, Spiel *zSpiel );
  95. ~TriggerRun();
  96. // gibt 0 zurück, wenn der Auslöser vollständig durchgelaufen ist
  97. bool runNext( double t );
  98. Trigger *getTrigger() const;
  99. };