#include "SpielChat.h" #include #include #include #include #include #include #include // Inhalt der SpielChat Klasse aus Chat.h // Konstruktor SpielChat::SpielChat() { rahmen = new LRahmen(); rahmen->setFarbe( 0xFF909090 ); rahmen->setRamenBreite( 1 ); rahmen->setSize( 450, 200 ); verlauf = new TextFeld(); verlauf->setStyle( TextFeld::Style::TextGebiet & ~( TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen | TextFeld::Style::Hintergrund ) ); verlauf->setText( "" ); verlauf->setSchriftFarbe( 0xFFFFFFFF ); verlauf->setSchriftSize( 12 ); verlauf->setSize( 446, 174 ); nachricht = new TextFeld(); nachricht->setStyle( TextFeld::Style::TextFeld & ~TextFeld::Style::Buffered ); nachricht->setText( "Drücke TAB um die Bestenliste anzuzeigen.\n" ); nachricht->setSchriftFarbe( 0xFF909090 ); nachricht->setSchriftSize( 12 ); nachricht->setRahmenBreite( 1 ); nachricht->setRahmenFarbe( 0xFF909090 ); nachricht->setSize( 446, 20 ); ref = 1; } // Destruktor SpielChat::~SpielChat() { rahmen->release(); verlauf->release(); nachricht->release(); } // nicht constant void SpielChat::setSchrift( Schrift *zSchrift ) { verlauf->setSchriftZ( zSchrift->getThis() ); nachricht->setSchriftZ( zSchrift->getThis() ); } void SpielChat::addNachricht( char *nachricht ) { verlauf->addZeile( nachricht, 0xFFFFFFFF ); verlauf->updateVScroll(); } void SpielChat::addNachricht( char *nachricht, int farbe ) { verlauf->addZeile( nachricht, farbe ); verlauf->updateVScroll(); } void SpielChat::doPublicMausEreignis( MausEreignis &me ) { bool vera = me.verarbeitet; verlauf->doPublicMausEreignis( me ); nachricht->doPublicMausEreignis( me ); if( !vera && me.verarbeitet ) { nachricht->setRahmenFarbe( 0xFFFFFFFF ); nachricht->setSchriftFarbe( 0xFFFFFFFF ); verlauf->setVertikalScrollFarbe( 0xFF808080, 0 ); rahmen->setFarbe( 0xFFFFFFFF ); } else { nachricht->setRahmenFarbe( 0xFF909090 ); nachricht->setSchriftFarbe( 0xFF909090 ); verlauf->setVertikalScrollFarbe( 0xFF404040, 0 ); rahmen->setFarbe( 0xFF909090 ); } } void SpielChat::doTastaturEreignis( TastaturEreignis &te, KSGClient::SpielServerClient *zKlient ) { if( te.taste == T_Esc ) nachricht->removeStyle( TextFeld::Style::Fokus ); if( te.id == TE_Release && te.taste == T_Enter && !te.verarbeitet ) { if( nachricht->hatStyle( TextFeld::Style::Fokus ) ) { if( nachricht->zText()->getLength() ) { short län = 1 + nachricht->zText()->getLength(); char *bytes = new char[ (__int64)län + 1 ]; *bytes = 3; for( int i = 1; i <= län; i++ ) bytes[ i ] = nachricht->zText()->getText()[ i - 1 ]; nachricht->setText( "" ); nachricht->setAuswahl( 0, 0 ); nachricht->removeStyle( TextFeld::Style::Fokus ); zKlient->spielNachricht( län, bytes ); delete[] bytes; te.verarbeitet = 1; } } else { nachricht->addStyle( TextFeld::Style::Fokus ); nachricht->setAuswahl( 0, nachricht->zText()->getLength() ); te.verarbeitet = 1; } } if( !te.verarbeitet ) nachricht->doTastaturEreignis( te ); if( nachricht->hatStyle( TextFeld::Style::Fokus ) ) { nachricht->setRahmenFarbe( 0xFFFFFFFF ); nachricht->setSchriftFarbe( 0xFFFFFFFF ); verlauf->setVertikalScrollFarbe( 0xFF808080, 0 ); rahmen->setFarbe( 0xFFFFFFFF ); } else { nachricht->setRahmenFarbe( 0xFF909090 ); nachricht->setSchriftFarbe( 0xFF909090 ); verlauf->setVertikalScrollFarbe( 0xFF404040, 0 ); rahmen->setFarbe( 0xFF909090 ); } } void SpielChat::tick( double z ) { nachricht->tick( z ); } void SpielChat::render( Bild &zRObj ) { rahmen->setPosition( Punkt( 10, zRObj.getHeight() - 210 ) ); verlauf->setPosition( rahmen->getX() + 2, rahmen->getY() + 2 ); nachricht->setPosition( rahmen->getX() + 2, rahmen->getY() + 178 ); rahmen->render( zRObj ); verlauf->render( zRObj ); nachricht->render( zRObj ); } // constant bool SpielChat::istAktiv() const { return nachricht->hatStyle( TextFeld::Style::Fokus ); } // Reference Counting SpielChat *SpielChat::getThis() { ref++; return this; } SpielChat *SpielChat::relese() { ref--; if( !ref ) delete this; return 0; }