Laser.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "Laser.h"
  2. #include "../Karte/Karte.h"
  3. #include "../Spieler/Spieler.h"
  4. #include "../Define.h"
  5. // Inhalt der Laser Klasse aus Laser.h
  6. // Konstruktor
  7. Laser::Laser( int id, Vec2< double > pos, Vec2< double > speed, int sNum, double intensität, int tf )
  8. : Object2D()
  9. {
  10. this->id = id;
  11. setPosition( pos );
  12. setSpeed( speed );
  13. this->sNum = sNum;
  14. this->intensität = intensität;
  15. this->startIntensität = intensität;
  16. this->tf = tf;
  17. setCollision( 0 );
  18. save();
  19. }
  20. // privat
  21. char Laser::getOutCode( Punkt& p, Bild &zrObj ) const
  22. {
  23. char ret = 0;
  24. if( p.x < 0 )
  25. ret |= 1;
  26. else if( p.x >= zrObj.getDrawGr().x )
  27. ret |= 2;
  28. if( p.y < 0 )
  29. ret |= 4;
  30. else if( p.y >= zrObj.getDrawGr().y )
  31. ret |= 8;
  32. return ret;
  33. }
  34. // nicht constant
  35. Rect2< float > Laser::getBoundingBox() const
  36. {
  37. return Rect2< float >();
  38. }
  39. bool Laser::tick( const WeltInfo &info, double tv )
  40. {
  41. __super::tick( info, tv );
  42. intensität -= tv * 2;
  43. return 1;
  44. }
  45. void Laser::render( Mat3< float > &kamMat, Bild &zRObj, const char *kamName )
  46. {
  47. int fa = (int)( ( intensität / startIntensität ) * 255 );
  48. int f = ( ( fa << 24 ) & 0xFF000000 ) | ( tf & 0xFFFFFF );
  49. Punkt a = (Punkt)( kamMat * getPosition() );
  50. Punkt b = (Punkt)( kamMat * ( getPosition() - ( getSpeed() / getSpeed().getLength() * 10 ) ) );
  51. zRObj.drawLinieBorderedAlpha( a, b, f, 0xFFFFFFFF );
  52. }
  53. void Laser::save()
  54. {
  55. last.pos = getPosition();
  56. last.speed = getSpeed();
  57. last.intensity = intensität;
  58. }
  59. void Laser::load()
  60. {
  61. intensität = last.intensity;
  62. setPosition( last.pos );
  63. setSpeed( last.speed );
  64. }
  65. // constant
  66. int Laser::getId() const
  67. {
  68. return id;
  69. }
  70. int Laser::getSpieler() const
  71. {
  72. return sNum;
  73. }
  74. double Laser::getIntensität( Vec2< double > targetSpeed ) const
  75. {
  76. return intensität * ( ( speed - targetSpeed ).getLength() / 200 );
  77. }
  78. // Reference Counting
  79. Laser *Laser::getThis()
  80. {
  81. ref++;
  82. return this;
  83. }
  84. Laser *Laser::release()
  85. {
  86. ref--;
  87. if( !ref )
  88. delete this;
  89. return 0;
  90. }