Player.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "Player.h"
  2. #include "Game.h"
  3. #include "res.h"
  4. #include "Joystick.h"
  5. #include "Rocket.h"
  6. Player::Player(): _lastRocketSpawn(0)
  7. {
  8. }
  9. void Player::_init()
  10. {
  11. //initialize player's ship
  12. _view->setPosition(_game->getSize() / 2);
  13. _ship = new Sprite;
  14. _ship->setResAnim(res::ui.getResAnim("ship"));
  15. _ship->attachTo(_view);
  16. _ship->setAnchor(Vector2(0.5f, 0.5f));
  17. _engine = new Sprite;
  18. _engine->setResAnim(res::ui.getResAnim("shipengine"));
  19. _engine->attachTo(_ship);
  20. //animate engine's fire
  21. _engine->addTween(Sprite::TweenColor(Color::Red), 500, -1, true);
  22. //by default it is hidden
  23. //and would be visible only if ship moves
  24. _engine->setVisible(false);
  25. }
  26. void Player::_update(const UpdateState& us)
  27. {
  28. _engine->setVisible(false);
  29. Vector2 dir;
  30. if (_game->_move->getDirection(dir))
  31. {
  32. //update player position according to delta time and finger direction from virtual joystick
  33. Vector2 pos = _view->getPosition();
  34. pos = pos + dir * (us.dt / 1000.0f) * 5;
  35. _view->setPosition(pos);
  36. //rotate it
  37. float angle = atan2f(dir.y, dir.x);
  38. _view->setRotation(angle);
  39. //if player moves show engine's fire
  40. _engine->setVisible(true);
  41. }
  42. if (_game->_fire->getDirection(dir))
  43. {
  44. //fire rockets each 300 ms
  45. if (_lastRocketSpawn + 300 < us.time)
  46. {
  47. _lastRocketSpawn = us.time;
  48. dir.normalize();
  49. //create rocket
  50. spRocket rocket = new Rocket(dir);
  51. rocket->init(_view->getPosition(), _game);
  52. }
  53. }
  54. }