Joystick.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "Joystick.h"
  2. #include "res.h"
  3. Joystick::Joystick(): _pressed(false), _dir(0, 0)
  4. {
  5. setResAnim(res::ui.getResAnim("joystick"));
  6. setAlpha(128);
  7. //handle touch events
  8. addEventListener(TouchEvent::TOUCH_DOWN, CLOSURE(this, &Joystick::onEvent));
  9. addEventListener(TouchEvent::TOUCH_UP, CLOSURE(this, &Joystick::onEvent));
  10. addEventListener(TouchEvent::MOVE, CLOSURE(this, &Joystick::onEvent));
  11. _finger = new Sprite;
  12. _finger->setResAnim(res::ui.getResAnim("finger"));
  13. _finger->attachTo(this);
  14. _finger->setVisible(false);
  15. _finger->setAnchor(Vector2(0.5f, 0.5f));
  16. _finger->setTouchEnabled(false);
  17. }
  18. void Joystick::onEvent(Event* ev)
  19. {
  20. TouchEvent* te = safeCast<TouchEvent*>(ev);
  21. //if player touched down
  22. if (te->type == TouchEvent::TOUCH_DOWN)
  23. {
  24. _finger->setVisible(true);
  25. setColor(Color::Red);
  26. _pressed = true;
  27. }
  28. //if player touched up
  29. if (te->type == TouchEvent::TOUCH_UP)
  30. {
  31. _finger->setVisible(false);
  32. setColor(Color::White);
  33. _pressed = false;
  34. }
  35. if (te->type == TouchEvent::MOVE)
  36. {
  37. }
  38. Vector2 center = getSize() / 2;
  39. _dir = te->localPosition - center;
  40. if (_dir.length() > 100)
  41. _dir.normalizeTo(100);
  42. _finger->setPosition(center + _dir);
  43. if (!_pressed)
  44. {
  45. _dir = Vector2(0, 0);
  46. }
  47. }
  48. bool Joystick::getDirection(Vector2& dir) const
  49. {
  50. dir = _dir;
  51. return _pressed;
  52. }