Asteroid.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "Asteroid.h"
  2. #include <Text.h>
  3. #include <Globals.h>
  4. #include <TastaturEreignis.h>
  5. #include "Schuss.h"
  6. #include <iostream>
  7. #include <Textur2D.h>
  8. #include "Schuss.h"
  9. // Inhalt der Asteroid Klasse aus Asteroid.h
  10. // Konstruktor
  11. Asteroid::Asteroid( Model2DData *data, Bild *textur, Vertex p, Vertex s, float rS, float r, float gr, char num )
  12. : Model2DObject()
  13. {
  14. setModel( data );
  15. setDrehung( r );
  16. setSize( gr );
  17. if( textur )
  18. {
  19. Textur2D *text = new Textur2D();
  20. text->setTexturZ( textur );
  21. setTextur( text );
  22. }
  23. setPosition( p );
  24. setSpeed( s );
  25. setDrehungSpeed( rSpeed );
  26. id = num;
  27. }
  28. // Destruktor
  29. Asteroid::~Asteroid()
  30. {}
  31. // nicht constant
  32. bool Asteroid::istGetroffen( Schuss *zSchuss, Polygon2D &a, Polygon2D &b, Punkt &pa, Punkt &pb, RandomGenerator *zRand )
  33. {
  34. if( getMasse() < 40 * 40 )
  35. return 0;
  36. if( istPunktInnen( zSchuss->getPosition() ) )
  37. {
  38. if( zModel()->split( getObjectPos( zSchuss->getPosition() - zSchuss->getSpeed() ), getObjectDir( zSchuss->getSpeed() ) * 0.1f, "", a, b, pa, pb, [ zRand ]()
  39. {
  40. return zRand->rand();
  41. } ) )
  42. {
  43. impuls( zSchuss->getPosition() - zSchuss->getSpeed(), zSchuss->getSpeed() * 0.05f );
  44. return 1;
  45. }
  46. }
  47. return 0;
  48. }
  49. bool Asteroid::tick( const WeltInfo &info, double time )
  50. {
  51. if( getMasse() < 40 * 40 )
  52. {
  53. setSize( getSize() - (float)time * 3 );
  54. if( getSize() < 0 )
  55. setSize( 0 );
  56. }
  57. return __super::tick( info, time );
  58. }
  59. // constant
  60. void Asteroid::save( Datei *zD ) const
  61. {
  62. zD->schreibe( (char*)&id, 1 );
  63. zD->schreibe( (char*)&position.x, 4 );
  64. zD->schreibe( (char*)&position.y, 4 );
  65. zD->schreibe( (char*)&speed.x, 4 );
  66. zD->schreibe( (char*)&speed.y, 4 );
  67. zD->schreibe( (char*)&rSpeed, 4 );
  68. float r = getDrehung();
  69. zD->schreibe( (char*)&r, 4 );
  70. float gr = getSize();
  71. zD->schreibe( (char*)&gr, 4 );
  72. }
  73. char Asteroid::getId() const
  74. {
  75. return id;
  76. }
  77. int Asteroid::getScore() const
  78. {
  79. if( getMasse() < 40 * 40 )
  80. return 1;
  81. return 0;
  82. }