123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- #include "Kamera.h"
- #include "../Karte/Karte.h"
- // Inhalt der Kamera Klasse aus Kamera.h
- // Konstruktor
- Kamera::Kamera()
- {
- pos = Punkt( 0, 0 );
- mmr.setFarbe( 0xFFFFFFFF );
- mmr.setRamenBreite( 1 );
- ref = 1;
- }
- // nicht constant
- void Kamera::setPosition( int x, int y )
- {
- pos = Punkt( x, y );
- }
- void Kamera::addPosition( int x, int y, Karte *zMap )
- {
- pos += Punkt( x, y );
- if( zMap )
- {
- if( pos.x < 0 )
- pos.x += zMap->getSize().x;
- if( pos.y < 0 )
- pos.y += zMap->getSize().y;
- if( pos.x >= zMap->getSize().x )
- pos.x -= zMap->getSize().x;
- if( pos.y >= zMap->getSize().y )
- pos.y -= zMap->getSize().y;
- }
- }
- bool Kamera::beginnRender( Bild &zRObj, Karte *zMap, int n )
- {
- Punkt kamLO( pos.x - zRObj.getBreite() / 2, pos.y - zRObj.getHeight() / 2 );
- Punkt kamRU( pos.x + zRObj.getBreite() / 2, pos.y + zRObj.getHeight() / 2 );
- Punkt mapGr = zMap->getSize();
- int c = 0;
- if( kamLO.x < 0 )
- c |= 1;
- if( kamLO.y / 2 < 0 )
- c |= 2;
- if( kamRU.x > mapGr.x )
- c |= 4;
- if( kamRU.y > mapGr.y )
- c |= 8;
- switch( c )
- {
- case 0:
- if( n )
- return 0;
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- break;
- case 1:
- if( n > 1 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x + zMap->getSize().x, kamLO.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- break;
- case 2:
- if( n > 1 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y + mapGr.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- break;
- case 3:
- if( n > 3 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x + mapGr.x, kamLO.y + mapGr.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x + mapGr.x, kamLO.y );
- }
- if( n == 2 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y + mapGr.y );
- }
- if( n == 3 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- break;
- case 4:
- if( n > 1 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x - mapGr.x, kamLO.y );
- }
- break;
- case 6:
- if( n > 3 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y + mapGr.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x - mapGr.x, kamLO.y + mapGr.y );
- }
- if( n == 2 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x - mapGr.x, kamLO.y );
- }
- if( n == 3 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- break;
- case 8:
- if( n > 1 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y - mapGr.y );
- }
- break;
- case 9:
- if( n > 3 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x + mapGr.x, kamLO.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x + mapGr.x, kamLO.y - mapGr.y );
- }
- if( n == 2 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y - mapGr.y );
- }
- if( n == 3 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- break;
- case 12:
- if( n > 3 )
- return 0;
- if( !n )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y );
- }
- if( n == 1 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x, kamLO.y - mapGr.y );
- }
- if( n == 2 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x - mapGr.x, kamLO.y );
- }
- if( n == 3 )
- {
- if( !zRObj.setDrawOptions( 0, 0, zRObj.getBreite(), zRObj.getHeight() ) )
- return 0;
- zRObj.addScrollOffset( kamLO.x - mapGr.x, kamLO.y - mapGr.y );
- }
- break;
- }
- return 1;
- }
- void Kamera::endRender( Bild &zRObj )
- {
- zRObj.releaseDrawOptions();
- }
- void Kamera::beginnMinimap( Bild &zRObj, Karte *zMap )
- {
- zRObj.setDrawOptions( zRObj.getBreite() - 260, zRObj.getHeight() - 260, 250, 250 );
- zRObj.drawLinieH( 0, 0, 250, 0xFFFFFFFF );
- zRObj.drawLinieH( 0, 249, 250, 0xFFFFFFFF );
- zRObj.drawLinieV( 0, 0, 250, 0xFFFFFFFF );
- zRObj.drawLinieV( 249, 0, 250, 0xFFFFFFFF );
- mmr.setSize( (int)( ( zRObj.getBreite() / (double)zMap->getSize().x ) * 250 + 0.5 ), (int)( ( zRObj.getHeight() / (double)zMap->getSize().y ) * 250 + 0.5 ) );
- mmr.setPosition( (int)( ( pos.x / (double)zMap->getSize().x ) * 250 + 0.5 ), (int)( ( pos.y / (double)zMap->getSize().y ) * 250 + 0.5 ) );
- mmr.setPosition( mmr.getPosition() - mmr.getSize() / 2 );
- mmr.render( zRObj );
- if( mmr.getX() < 0 )
- mmr.setPosition( mmr.getPosition() + Punkt( 250, 0 ) );
- mmr.render( zRObj );
- if( mmr.getY() < 0 )
- mmr.setPosition( mmr.getPosition() + Punkt( 0, 250 ) );
- if( mmr.getX() >= 250 - mmr.getBreite() )
- mmr.setPosition( mmr.getPosition() - Punkt( 250, 0 ) );
- mmr.render( zRObj );
- if( mmr.getY() >= 250 - mmr.getHeight() )
- mmr.setPosition( mmr.getPosition() - Punkt( 0, 250 ) );
- mmr.render( zRObj );
- }
- void Kamera::endMinimap( Bild &zRObj )
- {
- zRObj.releaseDrawOptions();
- }
- // constant
- Punkt Kamera::getPos() const
- {
- return pos;
- }
- // Reference Counting
- Kamera *Kamera::getThis()
- {
- ref++;
- return this;
- }
- Kamera *Kamera::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|