123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #include "Chat.h"
- #include <Rahmen.h>
- #include <MausEreignis.h>
- #include <TastaturEreignis.h>
- #include <Text.h>
- #include <Schrift.h>
- #include <Punkt.h>
- #include <Bild.h>
- // Inhalt der SpielChat Klasse aus Chat.h
- // Konstruktor
- SpielChat::SpielChat()
- {
- rahmen = new LRahmen();
- rahmen->setFarbe( 0xFF909090 );
- rahmen->setRamenBreite( 1 );
- rahmen->setSize( 450, 200 );
- rahmen->setPosition( 10, BildschirmGröße().y - 210 );
- verlauf = new TextFeld();
- verlauf->setStyle( TextFeld::Style::TextGebiet & ~( TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen ) );
- verlauf->setText( "" );
- verlauf->setSchriftFarbe( 0xFFFFFFFF );
- verlauf->setSchriftSize( 12 );
- verlauf->setPosition( rahmen->getX() + 2, rahmen->getY() + 2 );
- 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->setLinienRahmenBreite( 1 );
- nachricht->setLinienRahmenFarbe( 0xFF909090 );
- nachricht->setPosition( rahmen->getX() + 2, rahmen->getY() + 178 );
- 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 );
- verlauf->updateVScroll();
- }
- void SpielChat::addNachricht( char *nachricht, int farbe )
- {
- verlauf->zText()->appendColor( farbe );
- verlauf->addZeile( nachricht );
- verlauf->zText()->appendColor( 0xFFFFFFFF );
- verlauf->updateVScroll();
- }
- void SpielChat::doMausEreignis( MausEreignis &me )
- {
- bool vera = me.verarbeitet;
- verlauf->doMausEreignis( me );
- nachricht->doMausEreignis( me );
- if( !vera && me.verarbeitet )
- {
- nachricht->setLinienRahmenFarbe( 0xFFFFFFFF );
- nachricht->setSchriftFarbe( 0xFFFFFFFF );
- verlauf->setVertikalScrollFarbe( 0xFF808080, 0 );
- rahmen->setFarbe( 0xFFFFFFFF );
- }
- else
- {
- nachricht->setLinienRahmenFarbe( 0xFF909090 );
- nachricht->setSchriftFarbe( 0xFF909090 );
- verlauf->setVertikalScrollFarbe( 0xFF404040, 0 );
- rahmen->setFarbe( 0xFF909090 );
- }
- }
- void SpielChat::doTastaturEreignis( TastaturEreignis &te, SpielKlientV *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[ län + 1 ];
- *bytes = 8;
- 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->setLinienRahmenFarbe( 0xFFFFFFFF );
- nachricht->setSchriftFarbe( 0xFFFFFFFF );
- verlauf->setVertikalScrollFarbe( 0xFF808080, 0 );
- rahmen->setFarbe( 0xFFFFFFFF );
- }
- else
- {
- nachricht->setLinienRahmenFarbe( 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->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;
- }
|