MiniGame.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  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(const char* name)
  10. : ReferenceCounter()
  11. {
  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. Text* pfad = new Text("data/Minigames/");
  36. pfad->append(name);
  37. if (!DateiExistiert(pfad->getText()))
  38. {
  39. ok = 0;
  40. pfad->release();
  41. return;
  42. }
  43. pfad->append("/mg.ini");
  44. if (!DateiExistiert(pfad->getText()))
  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->getText()))
  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::doPublicMausEreignis(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. }