SpielerGUI.cpp 5.7 KB

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