#include "VideoKamera.h" #include "..\Karte\VideoKarte.h" #include #include // Inhalt der VideoKamera Klasse aus VideoKamera.h // Konstruktor VideoKamera::VideoKamera() { pos = Punkt( 0, 0 ); gr = Punkt( 0, 0 ); runde = 0; rundePos = new Array< Punkt >(); rundeGr = new Array< Punkt >(); rGr = Punkt( 0, 0 ); rahmen = new LRahmen(); rahmen->setFarbe( 0xFF505050 ); rahmen->setRamenBreite( 1 ); ref = 1; } // Destruktor VideoKamera::~VideoKamera() { rundePos->release(); rundeGr->release(); rahmen->release(); } // nicht constant void VideoKamera::setPosition( int x, int y ) { pos.x = x; pos.y = y; } void VideoKamera::addPosition( int x, int y, VideoKarte *zMap ) { pos.x += x; pos.y += y; if( pos.x < 0 ) pos.x = 0; if( pos.y < 0 ) pos.y = 0; if( pos.x > zMap->getBreite() ) pos.x = zMap->getBreite(); if( pos.y > zMap->getHeight() ) pos.y = zMap->getHeight(); } void VideoKamera::setSize( int br, int hö ) { gr.x = br; gr.y = hö; } void VideoKamera::render( Bild &zRObj ) { rGr = zRObj.getSize(); rahmen->setPosition( getRX( getLinks() ), getRY( getOben() ) ); rahmen->setSize( gr ); rahmen->render( zRObj ); } void VideoKamera::nextRunde( bool vorwärts ) { if( vorwärts ) { rundePos->set( pos, runde ); rundeGr->set( gr, runde ); runde++; } else { runde--; pos = rundePos->hat( runde ) ? rundePos->get( runde ) : Punkt( 0, 0 ); gr = rundeGr->hat( runde ) ? rundeGr->get( runde ) : Punkt( 0, 0 ); } } // constant int VideoKamera::getLinks() const { return pos.x - (int)( gr.x / 2.0 + 0.5 ); } int VideoKamera::getOben() const { return pos.y - gr.y / 2; } int VideoKamera::getRechts() const { return pos.x + gr.x / 2; } int VideoKamera::getUnten() const { return pos.y + gr.y / 2; } bool VideoKamera::istSichtbar( int x, int y ) const { return ( x >= getLinks() && x < getRechts() && y >= getOben() && y < getUnten() ); } bool VideoKamera::istMausIn( int x, int y ) const { return ( x >= ( rGr.x / 2 - gr.x / 2 ) && x < ( rGr.x / 2 + gr.x / 2 ) && y >= ( rGr.y / 2 - gr.y / 2 ) && y < ( rGr.y / 2 + gr.y / 2 ) ); } int VideoKamera::getRX( int mapX ) const { return rGr.x / 2 - ( pos.x - mapX ); } int VideoKamera::getRY( int mapY ) const { return rGr.y / 2 - ( pos.y - mapY ); } int VideoKamera::getX() const { return pos.x; } int VideoKamera::getY() const { return pos.y; } // Reference Counting VideoKamera *VideoKamera::getThis() { ref++; return this; } VideoKamera *VideoKamera::release() { ref--; if( !ref ) delete this; return 0; }