123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- #include "Objekt.h"
- #include "MausEreignis.h"
- #include "TastaturEreignis.h"
- #include "Punkt.h"
- #include <Windows.h>
- using namespace Framework;
- // Inhalt der Objekt Klasse aus Objekt.h
- // Konstruktor
- Objekt::Objekt()
- {
- Mak = 0;
- Tak = 0;
- pos = new Punkt( 0, 0 );
- gr = new Punkt( 0, 0 );
- InitializeCriticalSection( &Thread_Save );
- mausIn = 0;
- }
- // Destruktor
- Objekt::~Objekt()
- {
- pos->release();
- gr->release();
- DeleteCriticalSection( &Thread_Save );
- }
- // nicht constant
- void Objekt::lockObjekt()
- {
- EnterCriticalSection( &Thread_Save );
- }
- void Objekt::unlockObjekt()
- {
- LeaveCriticalSection( &Thread_Save );
- }
- void Objekt::setMausEreignis( bool (*ak)( void *, MausEreignis ) ) // setzt das Maus Ereignis
- {
- lockObjekt();
- Mak = ak;
- unlockObjekt();
- }
- void Objekt::setTastaturEreignis( bool (*ak)( void *, TastaturEreignis ) ) // setzt das TastaturEreignis
- {
- lockObjekt();
- Tak = ak;
- unlockObjekt();
- }
- void Objekt::doMausEreignis( MausEreignis *me ) // ruft Mak auf
- {
- if( me->verarbeitet || ( !( me->mx >= pos->x && me->mx <= pos->x + gr->x && me->my >= pos->y && me->my <= pos->y + gr->y ) && me->id != ME_Verlässt ) )
- {
- if( mausIn )
- {
- mausIn = 0;
- MausEreignis me2;
- me2.id = ME_Verlässt;
- me2.mx = me->mx;
- me2.my = me->my;
- me2.verarbeitet = 0;
- doMausEreignis( &me2 );
- }
- return;
- }
- if( !mausIn && me->id != ME_Verlässt )
- {
- mausIn = 1;
- MausEreignis me2;
- me2.id = ME_Betritt;
- me2.mx = me->mx;
- me2.my = me->my;
- me2.verarbeitet = 0;
- doMausEreignis( &me2 );
- }
- if( Mak != 0 )
- {
- me->verarbeitet |= Mak( this, *me );
- return;
- }
- }
- void Objekt::doTastaturEreignis( TastaturEreignis *te ) // ruft Tak auf
- {
- if( te->verarbeitet )
- return;
- if( Tak != 0 )
- {
- unlockObjekt();
- te->verarbeitet |= Tak( this, *te );
- }
- }
- void Objekt::setPosition( Punkt *pos ) // setzt die position
- {
- lockObjekt();
- this->pos->setP( pos->getX(), pos->getY() );
- pos->release();
- unlockObjekt();
- }
- void Objekt::setPositionZ( Punkt *pos )
- {
- lockObjekt();
- if( this->pos )
- this->pos->release();
- this->pos = pos;
- unlockObjekt();
- }
- void Objekt::setGröße( Punkt *gr ) // setzt die Größe
- {
- lockObjekt();
- this->gr->setP( gr->getX(), gr->getY() );
- gr->release();
- unlockObjekt();
- }
- void Objekt::setGrößeZ( Punkt *gr )
- {
- lockObjekt();
- if( this->gr )
- this->gr->release();
- this->gr = gr;
- unlockObjekt();
- }
- void Objekt::setPosition( int x, int y ) // setzt die position
- {
- lockObjekt();
- this->pos->setP( x, y );
- unlockObjekt();
- }
- void Objekt::setGröße( int x, int y ) // setzt die Größe
- {
- lockObjekt();
- this->gr->setP( x, y );
- unlockObjekt();
- }
- void Objekt::tick( double tickval )
- {
- }
- void Objekt::render( Bild *rObj )
- {
- }
- void Objekt::render( int xOff, int yOff, int bOff, int hOff, Bild *rObj )
- {
- }
- // constant
- bool Objekt::hatMausEreignis() const // prüft, ob Mak gesetzt ist
- {
- return Mak != 0;
- }
- bool Objekt::hatTastaturEreignis() const // prüft, ob Tak gesetzt ist
- {
- return Tak != 0;
- }
- Punkt *Objekt::getPosition() const // gibt die Position zurück
- {
- return pos->getThis();
- }
- Punkt *Objekt::getGröße() const // gibt die Größe zurück
- {
- return gr->getThis();
- }
- int Objekt::getBreite() const // gibt die Breite zurück
- {
- return gr->getX();
- }
- int Objekt::getHöhe() const // gibt die Höhe zurück
- {
- return gr->getY();
- }
- int Objekt::getX() const // gibt X zurück
- {
- return pos->getX();
- }
- int Objekt::getY() const // gibt Y zurück
- {
- return pos->getY();
- }
- // Inhalt der ObjektArray Klasse aus Objekt.h
- // Konstruktor
- ObjektArray::ObjektArray()
- {
- next = 0;
- This = 0;
- }
- // Destruktor
- ObjektArray::~ObjektArray()
- {
- if( next )
- delete next;
- }
- // nicht const
- bool ObjektArray::addObjekt( Objekt *obj ) // Fügt ein Objekt hinzu
- {
- if( obj == This )
- return 0;
- if( !This )
- {
- This = obj;
- return 1;
- }
- if( !next )
- next = new ObjektArray();
- return next->addObjekt( obj );
- }
- bool ObjektArray::removeObjekt( Objekt *obj ) // Entfernt ein Objekt
- {
- if( obj == This )
- {
- if( index == 0 )
- {
- if( next )
- {
- This = next->getObjekt();
- ObjektArray *tmp = next->getNext();
- next->setNext0();
- delete next;
- next = tmp;
- }
- else
- This = 0;
- return 0;
- }
- return 1;
- }
- if( !next )
- return 0;
- if( next->removeObjekt( obj ) )
- {
- ObjektArray *tmp = next->getNext();
- next->setNext0();
- delete next;
- next = tmp;
- }
- return 0;
- }
- bool ObjektArray::removeObjekt( int i ) // Entfernt das von diesem aus i-te Objekt
- {
- if( i == index )
- {
- if( index == 0 )
- {
- This = next->getObjekt();
- ObjektArray *tmp = next->getNext();
- next->setNext0();
- delete next;
- next = tmp;
- return 0;
- }
- return 1;
- }
- if( !next )
- return 0;
- if( next->removeObjekt( i ) )
- {
- ObjektArray *tmp = next->getNext();
- next->setNext0();
- delete next;
- next = tmp;
- }
- return 0;
- }
- void ObjektArray::setNext0() // Setzt das nächste Objekt zu 0
- {
- next = 0;
- }
- void ObjektArray::updateIndex( int i ) // aktualisiert die Index variable
- {
- index = i;
- if( next )
- next->updateIndex( i + 1 );
- }
- // constant
- ObjektArray *ObjektArray::getNext() const // gibt das nächste Objekt zurück
- {
- return next;
- }
- Objekt *ObjektArray::getObjekt( int i ) const // gibt das von diesem aus i-te Objekt zurück
- {
- if( i == index )
- return This;
- if( !next )
- return 0;
- return next->getObjekt( i );
- }
- Objekt *ObjektArray::getObjekt() const // gibt das von diesem aus i-te Objekt zurück
- {
- return This;
- }
- int ObjektArray::getIndex() const // Gibt den Index zurück
- {
- return index;
- }
- void ObjektArray::sendMausAll( MausEreignis *me ) const // sendet me an alle volgenden Objekte
- {
- if( next )
- next->sendMausAll( me );
- if( This )
- This->doMausEreignis( me );
- }
- void ObjektArray::sendTastaturAll( TastaturEreignis *te ) const // sendet te an alle volgenden Objekte
- {
- if( next )
- next->sendTastaturAll( te );
- if( This )
- This->doTastaturEreignis( te );
- }
- void ObjektArray::sendMaus( MausEreignis *me ) const // sendet me an dieses Objekt
- {
- This->doMausEreignis( me );
- }
- void ObjektArray::sendTastatur( TastaturEreignis *te ) const // sendet te an dieses Objekt
- {
- This->doTastaturEreignis( te );
- }
- void ObjektArray::sendMaus( int i, MausEreignis *me ) const // sendet me an das von diesem aus i-te Objekt
- {
- if( index == 1 )
- {
- This->doMausEreignis( me );
- return;
- }
- if( next )
- next->sendMaus( i, me );
- }
- void ObjektArray::sendTastatur( int i, TastaturEreignis *te ) const // sendet te an das von diesem aus i-te Objekt
- {
- if( index == 1 )
- {
- This->doTastaturEreignis( te );
- return;
- }
- if( next )
- next->sendTastatur( i, te );
- }
- void ObjektArray::render( Bild *rObj )
- {
- if( This )
- This->render( rObj );
- if( next )
- next->render( rObj );
- }
- void ObjektArray::render( int xOff, int yOff, int bOff, int hOff, Bild *rObj )
- {
- if( This )
- This->render( xOff, yOff, bOff, hOff, rObj );
- if( next )
- next->render( xOff, yOff, bOff, hOff, rObj );
- }
- void ObjektArray::tick( double tickval )
- {
- if( This )
- This->tick( tickval );
- if( next )
- next->tick( tickval );
- }
|