SpielerGUI.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. #include "SpielerGUI.h"
  2. #include "../../Initialisierung/Initialisierung.h"
  3. #include <MausEreignis.h>
  4. #include <Rahmen.h>
  5. #include <Fortschritt.h>
  6. using namespace Framework;
  7. int getStellen( double d )
  8. {
  9. int ret = 0;
  10. for( int i = 1; d >= i; i *= 10 )
  11. ret++;
  12. return ret;
  13. }
  14. // Inhalt der Ship Klasse aus Ship.h
  15. // Konstruktor
  16. SpielerGUI::SpielerGUI( Schrift *zSchrift )
  17. {
  18. ram = new LRahmen();
  19. ram->setSize( 200, 332 );
  20. ram->setPosition( Punkt( BildschirmGröße().x - 210, 10 ) );
  21. ram->setFarbe( 0xFFFFFFFF );
  22. spieler = initTextFeld( 5, 5, 190, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
  23. stabilität = initTextFeld( 5, 30, 165, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
  24. energie = initTextFeld( 5, 55, 165, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
  25. stabilitätB = new FBalken();
  26. stabilitätB->setPosition( 5, 30 );
  27. stabilitätB->setSize( 165, 20 );
  28. stabilitätB->setHintergrundFarbe( 0xFF000000 );
  29. stabilitätB->setFBgFarbe( 0xFF55FF55 );
  30. stabilitätB->setLinienRahmenFarbe( 0xFF00FF00 );
  31. stabilitätB->setLinienRahmenBreite( 1 );
  32. stabilitätB->setFRFarbe( 0xFF00FF00 );
  33. stabilitätB->setFRBreite( 1 );
  34. stabilitätB->setStyle( FBalken::Style::Sichtbar | FBalken::Style::L_R | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::Rahmen | FBalken::Style::FRahmen );
  35. energieB = new FBalken();
  36. energieB->setPosition( 5, 55 );
  37. energieB->setSize( 165, 20 );
  38. energieB->setHintergrundFarbe( 0xFF000000 );
  39. energieB->setFBgFarbe( 0xFF5555FF );
  40. energieB->setLinienRahmenFarbe( 0xFF0000FF );
  41. energieB->setLinienRahmenBreite( 1 );
  42. energieB->setFRFarbe( 0xFF0000FF );
  43. energieB->setFRBreite( 1 );
  44. energieB->setStyle( FBalken::Style::Sichtbar | FBalken::Style::L_R | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::Rahmen | FBalken::Style::FRahmen );
  45. reparatur = initTextFeld( 5, 80, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  46. akkuLeistung = initTextFeld( 5, 105, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  47. wendigkeit = initTextFeld( 5, 130, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  48. beschleunigung = initTextFeld( 5, 155, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  49. antriebEffizienz = initTextFeld( 5, 180, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  50. laserIntensität = initTextFeld( 5, 205, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  51. laserEffizienz = initTextFeld( 5, 230, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  52. laserTempo = initTextFeld( 5, 255, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  53. netzwerk = initTextFeld( 5, 280, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" );
  54. stabilitätSkill = initKnopf( 172, 30, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  55. energieSkill = initKnopf( 172, 55, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  56. reparaturSkill = initKnopf( 172, 80, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  57. akkuLeistungSkill = initKnopf( 172, 105, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  58. wendigkeitSkill = initKnopf( 172, 130, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  59. beschleunigungSkill = initKnopf( 172, 155, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  60. antriebEffizienzSkill = initKnopf( 172, 180, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  61. laserIntensitätSkill = initKnopf( 172, 205, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  62. laserEffizienzSkill = initKnopf( 172, 230, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  63. laserTempoSkill = initKnopf( 172, 255, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  64. netzwerkSkill = initKnopf( 172, 280, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" );
  65. stabilitätSkill->removeStyle( Knopf::Style::Erlaubt );
  66. energieSkill->removeStyle( Knopf::Style::Erlaubt );
  67. reparaturSkill->removeStyle( Knopf::Style::Erlaubt );
  68. akkuLeistungSkill->removeStyle( Knopf::Style::Erlaubt );
  69. wendigkeitSkill->removeStyle( Knopf::Style::Erlaubt );
  70. beschleunigungSkill->removeStyle( Knopf::Style::Erlaubt );
  71. laserIntensitätSkill->removeStyle( Knopf::Style::Erlaubt );
  72. laserEffizienzSkill->removeStyle( Knopf::Style::Erlaubt );
  73. laserTempoSkill->removeStyle( Knopf::Style::Erlaubt );
  74. netzwerkSkill->removeStyle( Knopf::Style::Erlaubt );
  75. skillPoints = initTextFeld( 5, 305, 180, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" );
  76. ref = 1;
  77. }
  78. // Destruktor
  79. SpielerGUI::~SpielerGUI()
  80. {
  81. ram->release();
  82. spieler->release();
  83. stabilität->release();
  84. energie->release();
  85. stabilitätB->release();
  86. energieB->release();
  87. reparatur->release();
  88. akkuLeistung->release();
  89. wendigkeit->release();
  90. beschleunigung->release();
  91. antriebEffizienz->release();
  92. laserIntensität->release();
  93. laserEffizienz->release();
  94. laserTempo->release();
  95. netzwerk->release();
  96. stabilitätSkill->release();
  97. energieSkill->release();
  98. reparaturSkill->release();
  99. akkuLeistungSkill->release();
  100. wendigkeitSkill->release();
  101. beschleunigungSkill->release();
  102. antriebEffizienzSkill->release();
  103. laserIntensitätSkill->release();
  104. laserEffizienzSkill->release();
  105. laserTempoSkill->release();
  106. netzwerkSkill->release();
  107. skillPoints->release();
  108. }
  109. // nicht constant
  110. void SpielerGUI::update( Spieler *zSpieler )
  111. {
  112. spieler->setText( zSpieler->name->getText() );
  113. spieler->setSchriftFarbe( zSpieler->current.farbe );
  114. Text txt;
  115. txt.setPrecision( getStellen( zSpieler->current.stabilität ) + 2 );
  116. txt = zSpieler->current.stabilität;
  117. txt += "/";
  118. txt.setPrecision( getStellen( zSpieler->current.maxStabilität ) + 2 );
  119. txt += zSpieler->current.maxStabilität;
  120. txt += "\r0xFF00FF00(+";
  121. txt.setPrecision( getStellen( zSpieler->team->maxStabilität ) + 2 );
  122. txt += zSpieler->team->maxStabilität;
  123. txt += ")";
  124. stabilität->setText( txt );
  125. stabilitätB->reset();
  126. stabilitätB->setAktionAnzahl( (int)( zSpieler->current.maxStabilität + zSpieler->team->maxStabilität ) );
  127. stabilitätB->aktionPlus( (int)( zSpieler->current.stabilität ) );
  128. txt.setPrecision( getStellen( zSpieler->current.energie ) + 2 );
  129. txt = zSpieler->current.energie;
  130. txt += "/";
  131. txt.setPrecision( getStellen( zSpieler->current.maxEnergie ) + 2 );
  132. txt += zSpieler->current.maxEnergie;
  133. txt += "\r0xFF00FF00(+";
  134. txt.setPrecision( getStellen( zSpieler->team->maxEnergie ) + 2 );
  135. txt += zSpieler->team->maxEnergie;
  136. txt += ")";
  137. energie->setText( txt );
  138. energieB->reset();
  139. energieB->setAktionAnzahl( (int)( zSpieler->current.maxEnergie + zSpieler->team->maxEnergie ) );
  140. energieB->aktionPlus( (int)( zSpieler->current.energie ) );
  141. txt = "Reparatur:";
  142. txt.setPrecision( getStellen( zSpieler->current.reparatur ) + 2 );
  143. txt += zSpieler->current.reparatur;
  144. txt += "\r0xFF00FF00(+";
  145. txt.setPrecision( getStellen( zSpieler->team->reparatur ) + 2 );
  146. txt += zSpieler->team->reparatur;
  147. txt += ")";
  148. reparatur->setText( txt );
  149. txt = "Akku:";
  150. txt.setPrecision( getStellen( zSpieler->current.akkuLeistung ) + 2 );
  151. txt += zSpieler->current.akkuLeistung;
  152. txt += "\r0xFF00FF00(+";
  153. txt.setPrecision( getStellen( zSpieler->team->akkuLeistung ) + 2 );
  154. txt += zSpieler->team->akkuLeistung;
  155. txt += ")";
  156. akkuLeistung->setText( txt );
  157. txt = "Wendigkeit:";
  158. txt.setPrecision( getStellen( zSpieler->current.wendigkeit ) + 2 );
  159. txt += zSpieler->current.wendigkeit;
  160. txt += "\r0xFF00FF00(+";
  161. txt.setPrecision( getStellen( zSpieler->team->wendigkeit ) + 2 );
  162. txt += zSpieler->team->wendigkeit;
  163. txt += ")";
  164. wendigkeit->setText( txt );
  165. txt = "Beschleunigung:";
  166. txt.setPrecision( getStellen( zSpieler->current.beschleunigung ) + 2 );
  167. txt += zSpieler->current.beschleunigung;
  168. txt += "\r0xFF00FF00(+";
  169. txt.setPrecision( getStellen( zSpieler->team->beschleunigung ) + 2 );
  170. txt += zSpieler->team->beschleunigung;
  171. txt += ")";
  172. beschleunigung->setText( txt );
  173. txt = "Antrieb effizienz:";
  174. txt.setPrecision( getStellen( zSpieler->current.antriebEffizienz ) + 2 );
  175. txt += zSpieler->current.antriebEffizienz;
  176. txt += "\r0xFF00FF00(+";
  177. txt.setPrecision( getStellen( zSpieler->team->antriebEffizienz ) + 2 );
  178. txt += zSpieler->team->antriebEffizienz;
  179. txt += ")";
  180. antriebEffizienz->setText( txt );
  181. txt = "Laser intensität:";
  182. txt.setPrecision( getStellen( zSpieler->current.laserIntensität ) + 2 );
  183. txt += zSpieler->current.laserIntensität;
  184. txt += "\r0xFF00FF00(+";
  185. txt.setPrecision( getStellen( zSpieler->team->laserIntensität ) + 2 );
  186. txt += zSpieler->team->laserIntensität;
  187. txt += ")";
  188. laserIntensität->setText( txt );
  189. txt = "Laser effizienz:";
  190. txt.setPrecision( getStellen( zSpieler->current.laserEffizienz ) + 2 );
  191. txt += zSpieler->current.laserEffizienz;
  192. txt += "\r0xFF00FF00(+";
  193. txt.setPrecision( getStellen( zSpieler->team->laserEffizienz ) + 2 );
  194. txt += zSpieler->team->laserEffizienz;
  195. txt += ")";
  196. laserEffizienz->setText( txt );
  197. txt = "Laser tempo:";
  198. txt.setPrecision( getStellen( zSpieler->current.laserTempo ) + 2 );
  199. txt += zSpieler->current.laserTempo;
  200. txt += "\r0xFF00FF00(+";
  201. txt.setPrecision( getStellen( zSpieler->team->laserTempo ) + 2 );
  202. txt += zSpieler->team->laserTempo;
  203. txt += ")";
  204. laserTempo->setText( txt );
  205. txt = "Netzwerk:";
  206. txt.setPrecision( getStellen( zSpieler->current.netzwerk ) + 2 );
  207. txt += zSpieler->current.netzwerk;
  208. netzwerk->setText( txt );
  209. stabilitätSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  210. energieSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  211. reparaturSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  212. akkuLeistungSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  213. wendigkeitSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  214. beschleunigungSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  215. antriebEffizienzSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  216. laserIntensitätSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  217. laserEffizienzSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  218. laserTempoSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  219. netzwerkSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() );
  220. skillPoints->setText( Text( zSpieler->skillPunkte ) += " Punkte" );
  221. }
  222. int SpielerGUI::doMausEreignis( MausEreignis &me )
  223. {
  224. me.mx -= ram->getX();
  225. me.my -= ram->getY();
  226. if( me.mx < 0 || me.my < 0 )
  227. return -1;
  228. int aktion = me.verarbeitet;
  229. stabilitätSkill->doMausEreignis( me );
  230. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  231. aktion = 2;
  232. energieSkill->doMausEreignis( me );
  233. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  234. aktion = 3;
  235. reparaturSkill->doMausEreignis( me );
  236. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  237. aktion = 4;
  238. antriebEffizienzSkill->doMausEreignis( me );
  239. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  240. aktion = 12;
  241. laserIntensitätSkill->doMausEreignis( me );
  242. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  243. aktion = 5;
  244. laserEffizienzSkill->doMausEreignis( me );
  245. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  246. aktion = 6;
  247. laserTempoSkill->doMausEreignis( me );
  248. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  249. aktion = 7;
  250. beschleunigungSkill->doMausEreignis( me );
  251. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  252. aktion = 8;
  253. wendigkeitSkill->doMausEreignis( me );
  254. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  255. aktion = 9;
  256. netzwerkSkill->doMausEreignis( me );
  257. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  258. aktion = 10;
  259. akkuLeistungSkill->doMausEreignis( me );
  260. if( !aktion && me.verarbeitet && me.id == ME_RLinks )
  261. aktion = 11;
  262. me.mx += ram->getX();
  263. me.my += ram->getY();
  264. if( aktion > 1 )
  265. return aktion - 2;
  266. return -1;
  267. }
  268. bool SpielerGUI::tick( double tickVal )
  269. {
  270. bool ret = stabilitätSkill->tick( tickVal );
  271. ret |= energieSkill->tick( tickVal );
  272. ret |= reparaturSkill->tick( tickVal );
  273. ret |= akkuLeistungSkill->tick( tickVal );
  274. ret |= wendigkeitSkill->tick( tickVal );
  275. ret |= beschleunigungSkill->tick( tickVal );
  276. ret |= antriebEffizienzSkill->tick( tickVal );
  277. ret |= laserIntensitätSkill->tick( tickVal );
  278. ret |= laserEffizienzSkill->tick( tickVal );
  279. ret |= laserTempoSkill->tick( tickVal );
  280. ret |= netzwerkSkill->tick( tickVal );
  281. return ret;
  282. }
  283. void SpielerGUI::render( Bild &zRObj )
  284. {
  285. zRObj.alphaRegion( ram->getX() + 1, ram->getY() + 1, ram->getBreite() - 2, ram->getHeight() - 2, 0xA0000000 );
  286. ram->render( zRObj );
  287. if( !zRObj.setDrawOptions( ram->getPosition() + Punkt( 1, 1 ), ram->getSize() - Punkt( 2, 2 ) ) )
  288. return;
  289. spieler->render( zRObj );
  290. stabilitätB->render( zRObj );
  291. stabilität->render( zRObj );
  292. stabilitätSkill->render( zRObj );
  293. energieB->render( zRObj );
  294. energie->render( zRObj );
  295. energieSkill->render( zRObj );
  296. reparatur->render( zRObj );
  297. reparaturSkill->render( zRObj );
  298. akkuLeistung->render( zRObj );
  299. akkuLeistungSkill->render( zRObj );
  300. wendigkeit->render( zRObj );
  301. wendigkeitSkill->render( zRObj );
  302. beschleunigung->render( zRObj );
  303. beschleunigungSkill->render( zRObj );
  304. antriebEffizienz->render( zRObj );
  305. antriebEffizienzSkill->render( zRObj );
  306. laserIntensität->render( zRObj );
  307. laserIntensitätSkill->render( zRObj );
  308. laserEffizienz->render( zRObj );
  309. laserEffizienzSkill->render( zRObj );
  310. laserTempo->render( zRObj );
  311. laserTempoSkill->render( zRObj );
  312. netzwerk->render( zRObj );
  313. netzwerkSkill->render( zRObj );
  314. skillPoints->render( zRObj );
  315. zRObj.releaseDrawOptions();
  316. }
  317. // Reference Counting
  318. SpielerGUI *SpielerGUI::getThis()
  319. {
  320. ref++;
  321. return this;
  322. }
  323. SpielerGUI *SpielerGUI::release()
  324. {
  325. ref--;
  326. if( !ref )
  327. delete this;
  328. return 0;
  329. }