Kamera.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "Kamera.h"
  2. #include "..\Karte\Karte.h"
  3. #include <Punkt.h>
  4. #include <Rahmen.h>
  5. // Inhalt der Kamera Klasse aus Kamera.h
  6. // Konstruktor
  7. Kamera::Kamera()
  8. {
  9. pos = Punkt( 0, 0 );
  10. gr = Punkt( 0, 0 );
  11. rGr = Punkt( 0, 0 );
  12. rahmen = new LRahmen();
  13. rahmen->setFarbe( 0xFF505050 );
  14. rahmen->setRamenBreite( 1 );
  15. ref = 1;
  16. }
  17. // Destruktor
  18. Kamera::~Kamera()
  19. {
  20. rahmen->release();
  21. }
  22. // nicht constant
  23. void Kamera::setPosition( int x, int y )
  24. {
  25. pos.x = x;
  26. pos.y = y;
  27. }
  28. void Kamera::addPosition( int x, int y, Karte *zMap )
  29. {
  30. pos.x += x;
  31. pos.y += y;
  32. if( pos.x < 0 )
  33. pos.x = 0;
  34. if( pos.y < 0 )
  35. pos.y = 0;
  36. if( pos.x > zMap->getBreite() )
  37. pos.x = zMap->getBreite();
  38. if( pos.y > zMap->getHeight() )
  39. pos.y = zMap->getHeight();
  40. }
  41. void Kamera::setSize( int br, int hö )
  42. {
  43. gr.x = br;
  44. gr.y = hö;
  45. }
  46. void Kamera::render( Bild &zRObj )
  47. {
  48. rGr = zRObj.getSize();
  49. rahmen->setPosition( getRX( getLinks() ), getRY( getOben() ) );
  50. rahmen->setSize( gr );
  51. rahmen->render( zRObj );
  52. }
  53. // constant
  54. int Kamera::getLinks() const
  55. {
  56. return pos.x - (int)( gr.x / 2.0 + 0.5 );
  57. }
  58. int Kamera::getOben() const
  59. {
  60. return pos.y - gr.y / 2;
  61. }
  62. int Kamera::getRechts() const
  63. {
  64. return pos.x + gr.x / 2;
  65. }
  66. int Kamera::getUnten() const
  67. {
  68. return pos.y + gr.y / 2;
  69. }
  70. bool Kamera::istSichtbar( int x, int y ) const
  71. {
  72. return ( x >= getLinks() && x < getRechts() && y >= getOben() && y < getUnten() );
  73. }
  74. bool Kamera::istMausIn( int x, int y ) const
  75. {
  76. 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 ) );
  77. }
  78. int Kamera::getRX( int mapX ) const
  79. {
  80. return rGr.x / 2 - ( pos.x - mapX );
  81. }
  82. int Kamera::getRY( int mapY ) const
  83. {
  84. return rGr.y / 2 - ( pos.y - mapY );
  85. }
  86. int Kamera::getX() const
  87. {
  88. return pos.x;
  89. }
  90. int Kamera::getY() const
  91. {
  92. return pos.y;
  93. }
  94. // Reference Counting
  95. Kamera *Kamera::getThis()
  96. {
  97. ref++;
  98. return this;
  99. }
  100. Kamera *Kamera::release()
  101. {
  102. ref--;
  103. if( !ref )
  104. delete this;
  105. return 0;
  106. }