Trigger.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "Trigger.h"
  2. #include "Gegenstand.h"
  3. VarPointer::VarPointer( const char *name, Variable *var )
  4. {
  5. this->name = name;
  6. this->var = var;
  7. ref = 1;
  8. }
  9. VarPointer::~VarPointer()
  10. {
  11. if( var )
  12. var->release();
  13. }
  14. Text VarPointer::getName() const
  15. {
  16. return name;
  17. }
  18. void VarPointer::setVariable( Variable *var )
  19. {
  20. if( this->var )
  21. this->var->release();
  22. this->var = var;
  23. }
  24. Variable *VarPointer::getVariable() const
  25. {
  26. return var ? var->getThis() : 0;
  27. }
  28. Variable *VarPointer::zVariable() const
  29. {
  30. return var;
  31. }
  32. VarPointer::operator Variable *( ) const
  33. {
  34. return var;
  35. }
  36. VarPointer *VarPointer::getThis()
  37. {
  38. ref++;
  39. return this;
  40. }
  41. VarPointer *VarPointer::release()
  42. {
  43. if( !--ref )
  44. delete this;
  45. return 0;
  46. }
  47. Bedingung::Bedingung( Aktion *expression )
  48. {
  49. this->expression = expression;
  50. ref = 1;
  51. }
  52. Bedingung::~Bedingung()
  53. {
  54. if( expression )
  55. expression->release();
  56. }
  57. void Bedingung::setExpression( Aktion *expr )
  58. {
  59. if( expression )
  60. expression->release();
  61. expression = expr;
  62. }
  63. bool Bedingung::check( Spiel *zSpiel, Ereignis *zEreignis )
  64. {
  65. if( !expression )
  66. return 1;
  67. double wait;
  68. ProgramCounter c;
  69. LocalMemory m;
  70. while( !expression->runNext( zSpiel, zEreignis, &m, &c, wait ) )
  71. {
  72. Variable *var = m.zVariable( "__return__" );
  73. if( !var )
  74. return 0;
  75. switch( var->getVariableTyp() )
  76. {
  77. case NICHTS:
  78. return 0;
  79. case INTEGER:
  80. return ( (Integer *)var )->getValue() != 0;
  81. case BOOLEAN:
  82. return ( (Boolean *)var )->getValue();
  83. case STRING:
  84. return ( (String *)var )->getValue().getLength();
  85. case FLOAT:
  86. return ( (Float *)var )->getValue() != 0;
  87. case TASTE:
  88. return ( (Integer *)var )->getValue() != 0;
  89. case GEGENSTAND_TYP:
  90. return ( (GegenstandTypVar *)var )->getValue() != KEIN_GEGENSTAND;
  91. default:
  92. return 1;
  93. }
  94. }
  95. }
  96. Bedingung *Bedingung::getThis()
  97. {
  98. ref++;
  99. return this;
  100. }
  101. Bedingung *Bedingung::release()
  102. {
  103. if( !--ref )
  104. delete this;
  105. return 0;
  106. }