BsHandleSlider2D.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2018 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Handles/BsHandleSlider2D.h"
  4. #include "Handles/BsHandleManager.h"
  5. #include "Handles/BsHandleSliderManager.h"
  6. #include "Math/BsRay.h"
  7. #include "Math/BsRect2I.h"
  8. #include "Renderer/BsCamera.h"
  9. namespace bs
  10. {
  11. HandleSlider2D::HandleSlider2D(UINT32 width, UINT32 height, UINT64 layer, Slider2DConstraint constraint)
  12. : HandleSlider(true, layer), mWidth(width), mHeight(height), mConstraint(constraint), mDelta(BsZero)
  13. , mStartPosition(BsZero)
  14. {
  15. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  16. sliderManager._registerSlider(this);
  17. }
  18. HandleSlider2D::~HandleSlider2D()
  19. {
  20. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  21. sliderManager._unregisterSlider(this);
  22. }
  23. bool HandleSlider2D::intersects(const Vector2I& screenPos, const Ray& ray, float& t) const
  24. {
  25. Vector2I center((INT32)mPosition.x, (INT32)mPosition.y);
  26. Rect2I currentArea(center.x - mWidth / 2, center.y - mHeight, mWidth, mHeight);
  27. return currentArea.contains(screenPos);
  28. }
  29. void HandleSlider2D::handleInput(const SPtr<Camera>& camera, const Vector2I& inputDelta)
  30. {
  31. assert(getState() == State::Active);
  32. mCurrentPointerPos += inputDelta;
  33. mDelta = mCurrentPointerPos - mStartPosition;
  34. if(mConstraint == Slider2DConstraint::Horizontal)
  35. mDelta.y = 0;
  36. else if(mConstraint == Slider2DConstraint::Vertical)
  37. mDelta.x = 0;
  38. }
  39. void HandleSlider2D::activate(const SPtr<Camera>& camera, const Vector2I& pointerPos)
  40. {
  41. mStartPosition = pointerPos;
  42. }
  43. }