Minigame.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. #include "MiniGame.h"
  2. #include <Rahmen.h>
  3. #include <Datei.h>
  4. #include <InitDatei.h>
  5. #include <DateiSystem.h>
  6. #include <MausEreignis.h>
  7. // Inhalt der Minigame Klasse aus MiniGame.h
  8. // Konstruktor
  9. MiniGame::MiniGame( char *name )
  10. {
  11. xPos = 0;
  12. yPos = 0;
  13. xAbs = 0;
  14. yAbs = 0;
  15. zXPos = 0;
  16. zYPos = 0;
  17. xSpeed = 0;
  18. ySpeed = 0;
  19. this->name = new Text( name );
  20. bgBild = 0;
  21. mausAlpha = new AlphaFeld();
  22. mausAlpha->setSize( 248, 98 );
  23. mausAlpha->setFarbe( 0xFF00FF00 );
  24. mausAlpha->setStrength( 50 );
  25. rahmen = new LRahmen();
  26. rahmen->setSize( 250, 100 );
  27. rahmen->setFarbe( 0xFFFFFFFF );
  28. rahmen->setRamenBreite( 1 );
  29. sichtbar = 1;
  30. alpha = 0;
  31. mausIn = 0;
  32. ok = 1;
  33. rend = 0;
  34. ref = 1;
  35. Text *pfad = new Text( "data/MiniGames/" );
  36. pfad->append( name );
  37. if( !DateiExistiert( pfad->getThis() ) )
  38. {
  39. ok = 0;
  40. pfad->release();
  41. return;
  42. }
  43. pfad->append( "/mg.ini" );
  44. if( !DateiExistiert( pfad->getThis() ) )
  45. {
  46. ok = 0;
  47. pfad->release();
  48. return;
  49. }
  50. InitDatei *mgIni = new InitDatei( pfad );
  51. if( !mgIni->laden() )
  52. {
  53. ok = 0;
  54. mgIni->release();
  55. return;
  56. }
  57. if( !mgIni->wertExistiert( "TitelBild" ) || !mgIni->wertExistiert( "TitelBildPfad" ) || !mgIni->wertExistiert( "DllPfad" ) )
  58. {
  59. ok = 0;
  60. mgIni->release();
  61. return;
  62. }
  63. Text *bPfad = new Text( "data/MiniGames/" );
  64. bPfad->append( name );
  65. bPfad->append( "/" );
  66. bPfad->append( mgIni->zWert( "TitelBildPfad" )->getText() );
  67. if( !DateiExistiert( bPfad->getThis() ) )
  68. {
  69. ok = 0;
  70. bPfad->release();
  71. mgIni->release();
  72. return;
  73. }
  74. LTDBDatei *bDat = new LTDBDatei();
  75. bDat->setDatei( bPfad );
  76. bDat->leseDaten( 0 );
  77. bgBild = bDat->laden( 0, mgIni->getWert( "TitelBild" ) );
  78. bDat->release();
  79. mgIni->release();
  80. if( !bgBild )
  81. ok = 0;
  82. }
  83. // Destruktor
  84. MiniGame::~MiniGame()
  85. {
  86. name->release();
  87. if( bgBild )
  88. bgBild->release();
  89. mausAlpha->release();
  90. rahmen->release();
  91. }
  92. // nicht constant
  93. void MiniGame::setPosition( int x, int y )
  94. {
  95. if( !xPos && !yPos )
  96. {
  97. xPos = x;
  98. yPos = y;
  99. }
  100. zXPos = x;
  101. zYPos = y;
  102. xAbs = (int)( zXPos - xPos );
  103. yAbs = (int)( zYPos - yPos );
  104. }
  105. void MiniGame::setSichtbar( bool sichtbar )
  106. {
  107. this->sichtbar = sichtbar;
  108. }
  109. void MiniGame::doMausEreignis( MausEreignis &me )
  110. {
  111. if( !this->sichtbar )
  112. return;
  113. if( me.mx > xPos && me.mx < xPos + 250 && me.my > yPos && me.my < yPos + 100 )
  114. {
  115. if( !mausIn )
  116. {
  117. rend = 1;
  118. rahmen->setFarbe( 0xFF00FF00 );
  119. }
  120. mausIn = 1;
  121. }
  122. else
  123. {
  124. if( mausIn )
  125. {
  126. rend = 1;
  127. rahmen->setFarbe( 0xFFFFFFFF );
  128. }
  129. mausIn = 0;
  130. }
  131. me.verarbeitet |= mausIn;
  132. }
  133. bool MiniGame::tick( double z )
  134. {
  135. bool ret = rend;
  136. rend = 0;
  137. int val = (int)( z * 150 );
  138. if( sichtbar && alpha != 255 )
  139. {
  140. if( alpha + val > 255 )
  141. alpha = 255;
  142. else
  143. alpha += val;
  144. ret = 1;
  145. }
  146. if( !sichtbar && alpha )
  147. {
  148. if( alpha - val < 0 )
  149. alpha = 0;
  150. else
  151. alpha -= val;
  152. ret = 1;
  153. }
  154. if( xPos != zXPos || yPos != zYPos )
  155. {
  156. if( xPos != zXPos )
  157. {
  158. if( xAbs > 0 )
  159. {
  160. if( zXPos - xPos >= xAbs / 2 )
  161. xSpeed += xAbs * z;
  162. else
  163. {
  164. xSpeed -= xAbs * z;
  165. if( xSpeed < zXPos - xPos )
  166. xSpeed += xAbs * z;
  167. }
  168. }
  169. else
  170. {
  171. if( zXPos - xPos <= xAbs / 2 )
  172. xSpeed += xAbs * z;
  173. else
  174. {
  175. xSpeed -= xAbs * z;
  176. if( xSpeed > zXPos - xPos )
  177. xSpeed += xAbs * z;
  178. }
  179. }
  180. }
  181. if( yPos != zYPos )
  182. {
  183. if( yAbs > 0 )
  184. {
  185. if( zYPos - yPos >= yAbs / 2 )
  186. ySpeed += yAbs * z;
  187. else
  188. {
  189. ySpeed -= yAbs * z;
  190. if( ySpeed < zYPos - yPos )
  191. ySpeed += yAbs * z;
  192. }
  193. }
  194. else
  195. {
  196. if( zYPos - yPos <= yAbs / 2 )
  197. ySpeed += yAbs * z;
  198. else
  199. {
  200. ySpeed -= yAbs * z;
  201. if( ySpeed > zYPos - yPos )
  202. ySpeed += yAbs * z;
  203. }
  204. }
  205. }
  206. xPos += xSpeed * z;
  207. yPos += ySpeed * z;
  208. if( xAbs > 0 )
  209. {
  210. if( xPos >= zXPos )
  211. {
  212. xPos = zXPos;
  213. xSpeed = 0;
  214. }
  215. }
  216. else
  217. {
  218. if( xPos <= zXPos )
  219. {
  220. xPos = zXPos;
  221. xSpeed = 0;
  222. }
  223. }
  224. if( yAbs > 0 )
  225. {
  226. if( yPos >= zYPos )
  227. {
  228. yPos = zYPos;
  229. ySpeed = 0;
  230. }
  231. }
  232. else
  233. {
  234. if( yPos <= zYPos )
  235. {
  236. yPos = zYPos;
  237. ySpeed = 0;
  238. }
  239. }
  240. ret = 1;
  241. }
  242. return ret;
  243. }
  244. void MiniGame::render( Bild &zRObj )
  245. {
  246. zRObj.setAlpha( alpha );
  247. zRObj.drawBild( (int)( xPos ), (int)( yPos ), 250, 100, *bgBild );
  248. rahmen->setPosition( (int)xPos, (int)yPos );
  249. rahmen->render( zRObj );
  250. if( mausIn )
  251. {
  252. mausAlpha->setPosition( (int)xPos + 1, (int)yPos + 1 );
  253. mausAlpha->render( zRObj );
  254. }
  255. zRObj.releaseAlpha();
  256. }
  257. // constant
  258. Text *MiniGame::zName()
  259. {
  260. return name;
  261. }
  262. bool MiniGame::istOk() const
  263. {
  264. return ok;
  265. }
  266. // Reference Counting
  267. MiniGame *MiniGame::getThis()
  268. {
  269. ref++;
  270. return this;
  271. }
  272. MiniGame *MiniGame::release()
  273. {
  274. ref--;
  275. if( !ref )
  276. delete this;
  277. return 0;
  278. }