SpielChat.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #include "SpielChat.h"
  2. #include <Rahmen.h>
  3. #include <MausEreignis.h>
  4. #include <TastaturEreignis.h>
  5. #include <Text.h>
  6. #include <Schrift.h>
  7. #include <Punkt.h>
  8. #include <Bild.h>
  9. // Inhalt der SpielChat Klasse aus Chat.h
  10. // Konstruktor
  11. SpielChat::SpielChat()
  12. {
  13. rahmen = new LRahmen();
  14. rahmen->setFarbe( 0xFF909090 );
  15. rahmen->setRamenBreite( 1 );
  16. rahmen->setSize( 450, 200 );
  17. verlauf = new TextFeld();
  18. verlauf->setStyle( TextFeld::Style::TextGebiet & ~( TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen | TextFeld::Style::Hintergrund ) );
  19. verlauf->setText( "" );
  20. verlauf->setSchriftFarbe( 0xFFFFFFFF );
  21. verlauf->setSchriftSize( 12 );
  22. verlauf->setSize( 446, 174 );
  23. nachricht = new TextFeld();
  24. nachricht->setStyle( TextFeld::Style::TextFeld & ~TextFeld::Style::Buffered );
  25. nachricht->setText( "Drücke TAB um die Bestenliste anzuzeigen.\n" );
  26. nachricht->setSchriftFarbe( 0xFF909090 );
  27. nachricht->setSchriftSize( 12 );
  28. nachricht->setRahmenBreite( 1 );
  29. nachricht->setRahmenFarbe( 0xFF909090 );
  30. nachricht->setSize( 446, 20 );
  31. ref = 1;
  32. }
  33. // Destruktor
  34. SpielChat::~SpielChat()
  35. {
  36. rahmen->release();
  37. verlauf->release();
  38. nachricht->release();
  39. }
  40. // nicht constant
  41. void SpielChat::setSchrift( Schrift *zSchrift )
  42. {
  43. verlauf->setSchriftZ( zSchrift->getThis() );
  44. nachricht->setSchriftZ( zSchrift->getThis() );
  45. }
  46. void SpielChat::addNachricht( char *nachricht )
  47. {
  48. verlauf->addZeile( nachricht, 0xFFFFFFFF );
  49. verlauf->updateVScroll();
  50. }
  51. void SpielChat::addNachricht( char *nachricht, int farbe )
  52. {
  53. verlauf->addZeile( nachricht, farbe );
  54. verlauf->updateVScroll();
  55. }
  56. void SpielChat::doPublicMausEreignis( MausEreignis &me )
  57. {
  58. bool vera = me.verarbeitet;
  59. verlauf->doPublicMausEreignis( me );
  60. nachricht->doPublicMausEreignis( me );
  61. if( !vera && me.verarbeitet )
  62. {
  63. nachricht->setRahmenFarbe( 0xFFFFFFFF );
  64. nachricht->setSchriftFarbe( 0xFFFFFFFF );
  65. verlauf->setVertikalScrollFarbe( 0xFF808080, 0 );
  66. rahmen->setFarbe( 0xFFFFFFFF );
  67. }
  68. else
  69. {
  70. nachricht->setRahmenFarbe( 0xFF909090 );
  71. nachricht->setSchriftFarbe( 0xFF909090 );
  72. verlauf->setVertikalScrollFarbe( 0xFF404040, 0 );
  73. rahmen->setFarbe( 0xFF909090 );
  74. }
  75. }
  76. void SpielChat::doTastaturEreignis( TastaturEreignis &te, KSGClient::SpielServerClient *zKlient )
  77. {
  78. if( te.taste == T_Esc )
  79. nachricht->removeStyle( TextFeld::Style::Fokus );
  80. if( te.id == TE_Release && te.taste == T_Enter && !te.verarbeitet )
  81. {
  82. if( nachricht->hatStyle( TextFeld::Style::Fokus ) )
  83. {
  84. if( nachricht->zText()->getLength() )
  85. {
  86. short län = 1 + nachricht->zText()->getLength();
  87. char *bytes = new char[ (__int64)län + 1 ];
  88. *bytes = 3;
  89. for( int i = 1; i <= län; i++ )
  90. bytes[ i ] = nachricht->zText()->getText()[ i - 1 ];
  91. nachricht->setText( "" );
  92. nachricht->setAuswahl( 0, 0 );
  93. nachricht->removeStyle( TextFeld::Style::Fokus );
  94. zKlient->spielNachricht( län, bytes );
  95. delete[] bytes;
  96. te.verarbeitet = 1;
  97. }
  98. }
  99. else
  100. {
  101. nachricht->addStyle( TextFeld::Style::Fokus );
  102. nachricht->setAuswahl( 0, nachricht->zText()->getLength() );
  103. te.verarbeitet = 1;
  104. }
  105. }
  106. if( !te.verarbeitet )
  107. nachricht->doTastaturEreignis( te );
  108. if( nachricht->hatStyle( TextFeld::Style::Fokus ) )
  109. {
  110. nachricht->setRahmenFarbe( 0xFFFFFFFF );
  111. nachricht->setSchriftFarbe( 0xFFFFFFFF );
  112. verlauf->setVertikalScrollFarbe( 0xFF808080, 0 );
  113. rahmen->setFarbe( 0xFFFFFFFF );
  114. }
  115. else
  116. {
  117. nachricht->setRahmenFarbe( 0xFF909090 );
  118. nachricht->setSchriftFarbe( 0xFF909090 );
  119. verlauf->setVertikalScrollFarbe( 0xFF404040, 0 );
  120. rahmen->setFarbe( 0xFF909090 );
  121. }
  122. }
  123. void SpielChat::tick( double z )
  124. {
  125. nachricht->tick( z );
  126. }
  127. void SpielChat::render( Bild &zRObj )
  128. {
  129. rahmen->setPosition( Punkt( 10, zRObj.getHeight() - 210 ) );
  130. verlauf->setPosition( rahmen->getX() + 2, rahmen->getY() + 2 );
  131. nachricht->setPosition( rahmen->getX() + 2, rahmen->getY() + 178 );
  132. rahmen->render( zRObj );
  133. verlauf->render( zRObj );
  134. nachricht->render( zRObj );
  135. }
  136. // constant
  137. bool SpielChat::istAktiv() const
  138. {
  139. return nachricht->hatStyle( TextFeld::Style::Fokus );
  140. }
  141. // Reference Counting
  142. SpielChat *SpielChat::getThis()
  143. {
  144. ref++;
  145. return this;
  146. }
  147. SpielChat *SpielChat::relese()
  148. {
  149. ref--;
  150. if( !ref )
  151. delete this;
  152. return 0;
  153. }