Variablen.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #include "Variablen.h"
  2. #include "Gegenstand.h"
  3. GeschossTyp getGeschossTypFromString( Text str )
  4. {
  5. if( str.istGleich( "KUGEL" ) )
  6. return GESCHOSS_KUGEL;
  7. if( str.istGleich( "DRACHENAUGE" ) )
  8. return GESCHOSS_DRACHENAUGE;
  9. if( str.istGleich( "FEUERBALL" ) )
  10. return GESCHOSS_FEUERBALL;
  11. if( str.istGleich( "MINE" ) )
  12. return GESCHOSS_MINE;
  13. return GESCHOSS_PFEIL;
  14. }
  15. Richtung invert( Richtung r )
  16. {
  17. if( r == OBEN )
  18. return UNTEN;
  19. if( r == UNTEN )
  20. return OBEN;
  21. if( r == LINKS )
  22. return RECHTS;
  23. if( r == RECHTS )
  24. return LINKS;
  25. return r;
  26. }
  27. Richtung getRichtungFromString( Text str )
  28. {
  29. if( str.istGleich( "OBEN" ) )
  30. return OBEN;
  31. if( str.istGleich( "LINKS" ) )
  32. return LINKS;
  33. if( str.istGleich( "UNTEN" ) )
  34. return UNTEN;
  35. if( str.istGleich( "RECHTS" ) )
  36. return RECHTS;
  37. return MITTE;
  38. }
  39. bool operator==( VariableTyp a, VariableTyp b )
  40. {
  41. if( a == GAME_OBJEKT || b == GAME_OBJEKT )
  42. {
  43. return ( a == BARIERE || a == BASE || a == DROP || a == GEGENSTAND || a == GESCHOSS ||
  44. a == SCHALTER || a == SCHIENE || a == SPIELER || a == TIMER ||
  45. a == TUNNEL || a == UMLENKUNG || a == GAME_OBJEKT || a == ALLE ) &&
  46. ( b == BARIERE || b == BASE || b == DROP || b == GEGENSTAND || b == GESCHOSS ||
  47. b == SCHALTER || b == SCHIENE || b == SPIELER || b == TIMER || b == TUNNEL ||
  48. b == UMLENKUNG || b == GAME_OBJEKT || b == ALLE );
  49. }
  50. if( a == ALLE || b == ALLE )
  51. return 1;
  52. return (int)a == (int)b;
  53. }
  54. bool operator!=( VariableTyp a, VariableTyp b )
  55. {
  56. return !( a == b );
  57. }
  58. Variable::Variable( VariableTyp typ )
  59. {
  60. this->typ = typ;
  61. ref = 1;
  62. }
  63. Variable::~Variable()
  64. {}
  65. VariableTyp Variable::getVariableTyp() const
  66. {
  67. return typ;
  68. }
  69. Variable *Variable::getThis()
  70. {
  71. ref++;
  72. return this;
  73. }
  74. Variable *Variable::release()
  75. {
  76. if( !--ref )
  77. delete this;
  78. return 0;
  79. }
  80. bool isTrue( Variable *v )
  81. {
  82. if( !v )
  83. return 0;
  84. switch( v->getVariableTyp() )
  85. {
  86. case NICHTS:
  87. return 0;
  88. case INTEGER:
  89. return ( (Integer *)v )->getValue() != 0;
  90. case BOOLEAN:
  91. return ( (Boolean *)v )->getValue();
  92. case STRING:
  93. return ( (String *)v )->getValue().getLength();
  94. case FLOAT:
  95. return ( (Float *)v )->getValue() != 0;
  96. case TASTE:
  97. return ( (Integer *)v )->getValue() != 0;
  98. case GEGENSTAND_TYP:
  99. return ( (GegenstandTypVar *)v )->getValue() != KEIN_GEGENSTAND;
  100. default:
  101. return 1;
  102. }
  103. }
  104. Integer::Integer( int value, bool taste )
  105. : Variable( taste ? TASTE : INTEGER )
  106. {
  107. this->value = value;
  108. }
  109. void Integer::setValue( int value )
  110. {
  111. this->value = value;
  112. }
  113. int Integer::getValue() const
  114. {
  115. return value;
  116. }
  117. Boolean::Boolean( bool value )
  118. : Variable( BOOLEAN )
  119. {
  120. this->value = value;
  121. }
  122. void Boolean::setValue( bool value )
  123. {
  124. this->value = value;
  125. }
  126. bool Boolean::getValue() const
  127. {
  128. return value;
  129. }
  130. String::String( const char *value )
  131. : Variable( STRING )
  132. {
  133. this->value = value;
  134. }
  135. String::String( Richtung r )
  136. : Variable( RICHTUNG )
  137. {
  138. switch( r )
  139. {
  140. case OBEN:
  141. value = "OBEN";
  142. break;
  143. case UNTEN:
  144. value = "UNTEN";
  145. break;
  146. case LINKS:
  147. value = "LINKS";
  148. break;
  149. case RECHTS:
  150. value = "RECHTS";
  151. break;
  152. case MITTE:
  153. value = "MITTE";
  154. break;
  155. default:
  156. break;
  157. }
  158. }
  159. String::String( GeschossTyp typ )
  160. : Variable( GESCHOSS_TYP )
  161. {
  162. switch( typ )
  163. {
  164. case GESCHOSS_PFEIL:
  165. value = "PFEIL";
  166. break;
  167. case GESCHOSS_KUGEL:
  168. value = "KUGEL";
  169. break;
  170. case GESCHOSS_FEUERBALL:
  171. value = "FEUERBALL";
  172. break;
  173. case GESCHOSS_DRACHENAUGE:
  174. value = "DRACHENAUGE";
  175. break;
  176. case GESCHOSS_MINE:
  177. value = "MINE";
  178. break;
  179. }
  180. }
  181. void String::setValue( Text value )
  182. {
  183. this->value = value;
  184. }
  185. const Text &String::getValue() const
  186. {
  187. return value;
  188. }
  189. Float::Float( float value )
  190. : Variable( FLOAT )
  191. {
  192. this->value = value;
  193. }
  194. void Float::setValue( float value )
  195. {
  196. this->value = value;
  197. }
  198. float Float::getValue() const
  199. {
  200. return value;
  201. }