Drop.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "Drop.h"
  2. #include "Spiel.h"
  3. #include "Ereignis.h"
  4. Drop::Drop( int id, int minX, int maxX, int minY, int maxY, int maxTime, int numDrops, const char *name, float wkeit[ ITEMANZAHL ] )
  5. : Variable( DROP )
  6. {
  7. this->id = id;
  8. this->name = name;
  9. this->minX = minX;
  10. this->maxX = maxX;
  11. this->minY = minY;
  12. this->maxY = maxY;
  13. this->maxTime = maxTime;
  14. this->nextDrop = (float)maxTime;
  15. this->numDrops = numDrops;
  16. memcpy( wahrscheinlichkeit, wkeit, sizeof( float ) * ITEMANZAHL );
  17. }
  18. Drop::~Drop()
  19. {}
  20. void Drop::setMinX( int x )
  21. {
  22. minX = x;
  23. }
  24. void Drop::setMaxX( int x )
  25. {
  26. maxX = x;
  27. }
  28. void Drop::setMinY( int y )
  29. {
  30. minY = y;
  31. }
  32. void Drop::setMaxY( int y )
  33. {
  34. maxY = y;
  35. }
  36. void Drop::setMaxTime( int seconds )
  37. {
  38. maxTime = seconds;
  39. }
  40. void Drop::setTime( float time )
  41. {
  42. this->nextDrop = time;
  43. }
  44. void Drop::doDrop( Spiel *zSpiel )
  45. {
  46. zSpiel->setLastDrop( dynamic_cast<Drop *>( getThis() ) );
  47. nextDrop = (float)maxTime;
  48. for( int i = 0; i < numDrops; i++ )
  49. {
  50. double p = zSpiel->getRand();
  51. int typ = 0;
  52. for( ; typ < ITEMANZAHL; typ++ )
  53. {
  54. if( p <= wahrscheinlichkeit[ typ ] )
  55. break;
  56. p -= wahrscheinlichkeit[ typ ];
  57. }
  58. int x = (int)( zSpiel->getRand() * ( maxX - minX - 100 ) + minX + 50 );
  59. int y = (int)( zSpiel->getRand() * ( maxY - minY - 100 ) + minY + 50 );
  60. if( x >= minX + 50 && x < maxX - 50 && y >= minY + 50 && y < maxY - 50 )
  61. zSpiel->addGegenstand( new Gegenstand( zSpiel->zResources(), zSpiel->getNextId(), (GegenstandTyp)typ, x, y ) );
  62. }
  63. Ereignis *e = new Ereignis( DROP_AKTION );
  64. e->addParameter( "Betroffener Drop", dynamic_cast<Drop *>( getThis() ) );
  65. zSpiel->throwEvent( e );
  66. }
  67. void Drop::tick( double time, Spiel *zSpiel )
  68. {
  69. nextDrop -= (float)time;
  70. if( nextDrop <= 0 )
  71. doDrop( zSpiel );
  72. }
  73. int Drop::getNumDrops() const
  74. {
  75. return numDrops;
  76. }
  77. int Drop::getMinX() const
  78. {
  79. return minX;
  80. }
  81. int Drop::getMaxX() const
  82. {
  83. return maxX;
  84. }
  85. int Drop::getMinY() const
  86. {
  87. return minY;
  88. }
  89. int Drop::getMaxY() const
  90. {
  91. return maxY;
  92. }
  93. float Drop::getZeit() const
  94. {
  95. return nextDrop;
  96. }
  97. int Drop::getMaxTime() const
  98. {
  99. return maxTime;
  100. }
  101. int Drop::getId() const
  102. {
  103. return id;
  104. }