BsHandleSliderDisc.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "BsHandleSliderDisc.h"
  2. #include "BsHandleManager.h"
  3. #include "BsHandleSliderManager.h"
  4. #include "BsRay.h"
  5. #include "BsVector3.h"
  6. #include "BsQuaternion.h"
  7. namespace BansheeEngine
  8. {
  9. const float HandleSliderDisc::TORUS_RADIUS = 0.5f;
  10. HandleSliderDisc::HandleSliderDisc(const Vector3& normal, float radius, float snapValue, bool fixedScale)
  11. :HandleSlider(fixedScale, snapValue), mRadius(radius)
  12. {
  13. Vector3 x, z;
  14. mNormal.orthogonalComplement(x, z);
  15. mTorusRotation = (Matrix4)Matrix3(x, mNormal, z); // Our Torus class doesn't allow us to specify a normal so we embed it here
  16. mCollider = Torus(radius, TORUS_RADIUS);
  17. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  18. sliderManager._registerSlider(this);
  19. }
  20. HandleSliderDisc::~HandleSliderDisc()
  21. {
  22. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  23. sliderManager._unregisterSlider(this);
  24. }
  25. void HandleSliderDisc::updateCachedTransform() const
  26. {
  27. mTransform.setTRS(mPosition, mRotation, mScale);
  28. mTransform = mTransform * mTorusRotation;
  29. mTransformInv = mTransform.inverseAffine();
  30. mTransformDirty = false;
  31. }
  32. bool HandleSliderDisc::intersects(const Ray& ray, float& t) const
  33. {
  34. Ray localRay = ray;
  35. localRay.transform(getTransformInv());
  36. auto intersect = mCollider.intersects(localRay);
  37. if (intersect.first)
  38. {
  39. t = intersect.second;
  40. return true;
  41. }
  42. return false;
  43. }
  44. void HandleSliderDisc::reset()
  45. {
  46. // TODO - Clear delta
  47. }
  48. void HandleSliderDisc::update(const HCamera& camera, const Vector2I& pointerPos, const Ray& ray)
  49. {
  50. assert(getState() == State::Active);
  51. mLastPointerPos = mCurPointerPos;
  52. mCurPointerPos = pointerPos;
  53. // TODO
  54. }
  55. }