Kebab.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include "Kebab.hpp"
  2. #include "Echo.hpp"
  3. #include "Player.hpp"
  4. Texture Kebab::_tex;
  5. Texture Kebab::_tex2;
  6. Kebab::Kebab(Shared* context)
  7. {
  8. _context = context;
  9. if(_tex.getSize().x == 0) {
  10. _tex.loadFromFile("data/kebab.png");
  11. }
  12. if(_tex2.getSize().x == 0) {
  13. _tex2.loadFromFile("data/kebab2.png");
  14. }
  15. keb.setTexture(_tex);
  16. spr.setTexture(_tex2);
  17. keb.setOrigin(16, 24);
  18. spr.setOrigin(16, 24);
  19. dead = 0;
  20. released = 1;
  21. phasing = 0;
  22. }
  23. Kebab::~Kebab()
  24. {
  25. }
  26. void Kebab::loop(float delta)
  27. {
  28. IntRect b = IntRect(getPosition().x + keb.getGlobalBounds().left,
  29. getPosition().y + keb.getGlobalBounds().top + 24.f,
  30. keb.getTextureRect().width,
  31. keb.getTextureRect().height);
  32. for(unsigned i = 0; i < _context->gz.size(); ++i)
  33. {
  34. if(_context->gz[i].intersects(b))
  35. {
  36. dead = true;
  37. _context->gz[i].width = 0;
  38. _context->_s += 100;
  39. return;
  40. }
  41. }
  42. int phaseSpeed = 300;
  43. int a = keb.getColor().a;
  44. if(!released) {
  45. spr.move(delta * 160.f * spr.getScale().x, 0);
  46. }
  47. if(!phasing) {
  48. if(clk.getElapsedTime().asSeconds() > 16.f) {
  49. a -= delta * phaseSpeed;
  50. if(a <= 0)
  51. dead = true;
  52. else {
  53. keb.setColor(Color(255, 255, 255, a >= 0 ? a : 0));
  54. if(released) spr.setColor(Color(255, 255, 255, a >= 0 ? a : 0));
  55. }
  56. }
  57. else if(a < 255) {
  58. a += delta * phaseSpeed;
  59. keb.setColor(Color(255, 255, 255, a < 255 ? a : 255));
  60. if(released) spr.setColor(Color(255, 255, 255, a < 255 ? a : 255));
  61. }
  62. if(_context->p->getPosition().x + 48.f < getPosition().x) {
  63. if(spr.getScale().x == 1.f && rotcd.getElapsedTime().asSeconds() > 2.f) {
  64. spr.setScale(-1.f, 1.f);
  65. keb.setScale(-1.f, 1.f);
  66. rotcd.restart();
  67. }
  68. }
  69. else if(_context->p->getPosition().x - 48.f > getPosition().x) {
  70. if(spr.getScale().x == -1.f && rotcd.getElapsedTime().asSeconds() > 2.f) {
  71. spr.setScale(1.f, 1.f);
  72. keb.setScale(1.f, 1.f);
  73. rotcd.restart();
  74. }
  75. }
  76. else if(_context->p->getPosition().y != getPosition().y) {
  77. if(phasecd.getElapsedTime().asSeconds() > 4.f)
  78. phasing = true;
  79. }
  80. else {
  81. released = false;
  82. }
  83. move(delta * 120.f * keb.getScale().x, 0.f);
  84. }
  85. else {
  86. phasecd.restart();
  87. a -= delta * phaseSpeed;
  88. keb.setColor(Color(255, 255, 255, a >= 0 ? a : 0));
  89. if(released) spr.setColor(Color(255, 255, 255, a >= 0 ? a : 0));
  90. if(a <= 20) {
  91. phasing = false;
  92. move(0, 16.f);
  93. }
  94. }
  95. }
  96. void Kebab::draw(RenderTarget& target, RenderStates states) const
  97. {
  98. states.transform *= getTransform();
  99. target.draw(spr, states);
  100. target.draw(keb, states);
  101. }