SpielerGUI.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include "SpielerGUI.h"
  2. SpielerGUI::SpielerGUI( ResourceRegistry *zResources )
  3. {
  4. resources = zResources->getThis();
  5. spieler = 0;
  6. schrift = zResources->getSchrift();
  7. erf = zResources->zResource( R_GUI_ERF, 0 )->getImage( 0 );
  8. erfRand = zResources->zResource( R_GUI_ERF_RAND, 0 )->getImage( 0 );
  9. ausw = zResources->zResource( R_GUI_INVENTAR_AUSWAHL, 0 )->getImage( 0 );
  10. invBg = zResources->zResource( R_GUI_INVENTAR_HINTERGRUND, 0 )->getImage( 0 );
  11. invBgUsed = zResources->zResource( R_GUI_INVENTAR_HINTERGRUND_BENUTZT, 0 )->getImage( 0 );
  12. lebenRand = zResources->zResource( R_GUI_LEBEN_RAND, 0 )->getImage( 0 );
  13. levelRand = zResources->zResource( R_GUI_LEVEL_RAND, 0 )->getImage( 0 );
  14. spielerBild = zResources->zResource( R_GUI_SPIELER, 0 )->getImage( 0 );
  15. levelT = new TextFeld();
  16. levelT->setStyle( TextFeld::Style::Text | TextFeld::Style::Center );
  17. levelT->setSchriftZ( schrift->getThis() );
  18. levelT->setText( "0" );
  19. levelT->setSchriftFarbe( 0xFFFFFFFF );
  20. levelT->setSize( 75, 20 );
  21. levelT->setPosition( 162, 0 );
  22. lebenB = new FBalken();
  23. lebenB->setStyle( FBalken::Style::Sichtbar | FBalken::Style::FFarbe | FBalken::Style::L_R | FBalken::Style::Aktionen );
  24. lebenB->setSize( 178, 18 );
  25. lebenB->setFBgFarbe( 0xFF00FF00 );
  26. lebenB->setSchriftZ( schrift->getThis() );
  27. lebenB->setSFarbe( 0xFFFFFFFF );
  28. lebenB->setSSize( 12 );
  29. lebenB->setPosition( 111, 31 );
  30. itemAnzahlT = new TextFeld();
  31. itemAnzahlT->setStyle( TextFeld::Style::Text );
  32. itemAnzahlT->setSchriftZ( schrift->getThis() );
  33. itemAnzahlT->setSize( 40, 20 );
  34. spielerInfo = new TextFeld();
  35. spielerInfo->setStyle( TextFeld::Style::Text );
  36. spielerInfo->setSchriftZ( schrift->getThis() );
  37. spielerInfo->setSchriftFarbe( 0xFFA0A0A0 );
  38. spielerInfo->setSize( 290, 170 );
  39. spielerInfo->setPosition( 5, 225 );
  40. }
  41. SpielerGUI::~SpielerGUI()
  42. {
  43. if( spieler )
  44. spieler->release();
  45. schrift->release();
  46. erf->release();
  47. erfRand->release();
  48. ausw->release();
  49. invBg->release();
  50. invBgUsed->release();
  51. lebenRand->release();
  52. levelRand->release();
  53. spielerBild->release();
  54. levelT->release();
  55. lebenB->release();
  56. resources->release();
  57. itemAnzahlT->release();
  58. spielerInfo->release();
  59. }
  60. void SpielerGUI::setSpieler( Spieler *spieler )
  61. {
  62. if( this->spieler )
  63. this->spieler->release();
  64. this->spieler = spieler;
  65. int *buffer = spielerBild->getBuffer();
  66. for( int i = 0; i < spielerBild->getBreite() * spielerBild->getHeight(); i++ )
  67. {
  68. if( buffer[ i ] == 0xFF202020 )
  69. buffer[ i ] = spieler->getFarbe();
  70. if( buffer[ i ] == 0xFF404040 && spieler->zTeam() )
  71. buffer[ i ] = spieler->zTeam()->getFarbe();
  72. }
  73. }
  74. void SpielerGUI::render( Bild &rObj )
  75. {
  76. if( !spieler )
  77. return;
  78. rObj.drawBild( 0, 0, 100, 100, *spielerBild );
  79. rObj.drawBild( 162, 0, 75, 20, *levelRand );
  80. levelT->setText( Text( "Level " ) + spieler->getLevel() );
  81. levelT->render( rObj );
  82. rObj.drawBild( 105, 25, 190, 30, *lebenRand );
  83. lebenB->reset();
  84. lebenB->setAktionAnzahl( spieler->getMaxLeben() );
  85. lebenB->aktionPlus( (int)spieler->getLeben() );
  86. lebenB->render( rObj );
  87. rObj.drawBild( 120, 60, 160, 25, *erfRand );
  88. int erfBreite = (int)( ( 150.f / spieler->getMaxErfahrung() ) * spieler->getErfahrung() );
  89. rObj.drawBildSkall( 125, 65, erfBreite, 15, *erf );
  90. rObj.fillRegion( 37, 105, 225, 115, 0xFFA36629 );
  91. for( int i = 0; i < 8; i++ )
  92. {
  93. int x = 42 + 55 * ( i % 4 );
  94. int y = 110 + 55 * ( i / 4 );
  95. if( spieler->getInventory().getSelectedIndex() == i )
  96. rObj.drawBild( x - 5, y - 5, 60, 60, *ausw );
  97. if( spieler->getInventory().getItemTyp( i ) == KEIN_GEGENSTAND )
  98. rObj.drawBild( x, y, 50, 50, *invBg );
  99. else
  100. {
  101. rObj.drawBild( x, y, 50, 50, *invBgUsed );
  102. rObj.alphaBild( x, y, 50, 50, *zResourceOfItem( spieler->getInventory().getItemTyp( i ), resources )->zImage( 0 ) );
  103. if( spieler->getInventory().getAbklingzeit( i ) > 0 )
  104. {
  105. itemAnzahlT->setSchriftFarbe( 0xFFFF0000 );
  106. itemAnzahlT->setText( Text( (int)( spieler->getInventory().getAbklingzeit( i ) * 100 ) / 100.f ) );
  107. }
  108. else
  109. {
  110. itemAnzahlT->setSchriftFarbe( 0xFFFFFFFF );
  111. itemAnzahlT->setText( Text( spieler->getInventory().getItemAnzahl( spieler->getInventory().getItemTyp( i ) ) ) );
  112. }
  113. itemAnzahlT->setPosition( x + 5, y );
  114. itemAnzahlT->render( rObj );
  115. }
  116. }
  117. Text info = Text( "Eigenschaften:\n" ) +
  118. "Lauftempo: " + (int)spieler->getLaufTempo() + " pixel/s\n" +
  119. "Geschosstempo: " + (int)spieler->getGeschossTempo() + " pixel/s\n" +
  120. "Rüstung: " + (int)spieler->getArmor() + " %\n" +
  121. "Bonusschaden: " + (int)spieler->getSchadenBonus() + " %\n" +
  122. "Lebensraub: " + (int)spieler->getLebensRaub() + " %\n" +
  123. "Lebensregeneration: " + ((int)(spieler->getLebensRegenneration() * 100) / 100.f) + " /s\n" +
  124. "Abklingzeitverringerung: " + (int)spieler->getAbklingZeitVerringerung();
  125. spielerInfo->setText( info );
  126. spielerInfo->render( rObj );
  127. int x = spielerInfo->getX();
  128. int y = spielerInfo->getY() + spielerInfo->getHeight() + 5;
  129. for( auto e = spieler->getEffects(); e; e++ )
  130. {
  131. if( e->renderEffect( x, y, 50, 50, rObj, schrift ) )
  132. {
  133. x += 55;
  134. if( x >= 245 )
  135. {
  136. x = 5;
  137. y += 55;
  138. }
  139. }
  140. }
  141. }