BsHandleSliderDisc.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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, bool fixedScale)
  11. :HandleSlider(fixedScale), 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. if (mFixedScale)
  28. mTransform.setTRS(mPosition, mRotation, mScale * mDistanceScale);
  29. else
  30. mTransform.setTRS(mPosition, mRotation, mScale);
  31. mTransform = mTransform * mTorusRotation;
  32. mTransformInv = mTransform.inverseAffine();
  33. mTransformDirty = false;
  34. }
  35. bool HandleSliderDisc::intersects(const Ray& ray, float& t) const
  36. {
  37. Ray localRay = ray;
  38. localRay.transform(getTransformInv());
  39. auto intersect = mCollider.intersects(localRay);
  40. if (intersect.first)
  41. {
  42. t = intersect.second;
  43. return true;
  44. }
  45. return false;
  46. }
  47. void HandleSliderDisc::handleInput(const CameraHandlerPtr& camera, const Vector2I& pointerPos, const Ray& ray)
  48. {
  49. assert(getState() == State::Active);
  50. mLastPointerPos = mCurPointerPos;
  51. mCurPointerPos = pointerPos;
  52. if (mHasLastPos)
  53. {
  54. // TODO
  55. }
  56. mHasLastPos = false;
  57. }
  58. }