Minigame.cpp 6.1 KB

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