Chat.cpp 4.1 KB

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