#include "Kamera.h" #include "..\Karte\Karte.h" #include #include // Inhalt der Kamera Klasse aus Kamera.h // Konstruktor Kamera::Kamera() { pos = Punkt( 0, 0 ); gr = Punkt( 0, 0 ); rGr = Punkt( 0, 0 ); rahmen = new LRahmen(); rahmen->setFarbe( 0xFF505050 ); rahmen->setRamenBreite( 1 ); ref = 1; } // Destruktor Kamera::~Kamera() { rahmen->release(); } // nicht constant void Kamera::setPosition( int x, int y ) { pos.x = x; pos.y = y; } void Kamera::addPosition( int x, int y, Karte *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 Kamera::setSize( int br, int hö ) { gr.x = br; gr.y = hö; } void Kamera::render( Bild &zRObj ) { rGr = zRObj.getSize(); rahmen->setPosition( getRX( getLinks() ), getRY( getOben() ) ); rahmen->setSize( gr ); rahmen->render( zRObj ); } // constant int Kamera::getLinks() const { return pos.x - (int)( gr.x / 2.0 + 0.5 ); } int Kamera::getOben() const { return pos.y - gr.y / 2; } int Kamera::getRechts() const { return pos.x + gr.x / 2; } int Kamera::getUnten() const { return pos.y + gr.y / 2; } bool Kamera::istSichtbar( int x, int y ) const { return ( x >= getLinks() && x < getRechts() && y >= getOben() && y < getUnten() ); } bool Kamera::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 Kamera::getRX( int mapX ) const { return rGr.x / 2 - ( pos.x - mapX ); } int Kamera::getRY( int mapY ) const { return rGr.y / 2 - ( pos.y - mapY ); } int Kamera::getX() const { return pos.x; } int Kamera::getY() const { return pos.y; } // Reference Counting Kamera *Kamera::getThis() { ref++; return this; } Kamera *Kamera::release() { ref--; if( !ref ) delete this; return 0; }