2
0

BsHandleSliderPlane.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "BsHandleSliderPlane.h"
  2. #include "BsHandleManager.h"
  3. #include "BsHandleSliderManager.h"
  4. #include "BsVector3.h"
  5. #include "BsRay.h"
  6. namespace BansheeEngine
  7. {
  8. HandleSliderPlane::HandleSliderPlane(const Vector3& dir1, const Vector3& dir2, float length, float snapValue, bool fixedScale)
  9. :HandleSlider(fixedScale, snapValue), mLength(length)
  10. {
  11. mDirection1 = Vector3::normalize(dir1);
  12. mDirection2 = Vector3::normalize(dir2);
  13. std::array<Vector3, 2> axes = { mDirection1, mDirection2 };
  14. std::array<float, 2> extents = { length, length };
  15. mCollider = Rect3(Vector3::ZERO, axes, extents);
  16. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  17. sliderManager._registerSlider(this);
  18. }
  19. HandleSliderPlane::~HandleSliderPlane()
  20. {
  21. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  22. sliderManager._unregisterSlider(this);
  23. }
  24. bool HandleSliderPlane::intersects(const Ray& ray, float& t) const
  25. {
  26. Ray localRay = ray;
  27. localRay.transform(getTransformInv());
  28. auto intersect = mCollider.intersects(ray);
  29. if (intersect.first)
  30. return intersect.second;
  31. return false;
  32. }
  33. void HandleSliderPlane::update(const HCamera& camera, const Vector2I& pointerPos, const Ray& ray)
  34. {
  35. assert(getState() == State::Active);
  36. mLastPointerPos = mCurPointerPos;
  37. mCurPointerPos = pointerPos;
  38. // TODO
  39. }
  40. }