BsHandleSliderDisc.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "BsHandleSliderDisc.h"
  2. #include "BsHandleManager.h"
  3. #include "BsHandleSliderManager.h"
  4. #include "BsTorus.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. Torus collider(radius, TORUS_RADIUS);
  17. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  18. sliderManager._registerTorusCollider(collider, this);
  19. }
  20. HandleSliderDisc::~HandleSliderDisc()
  21. {
  22. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  23. sliderManager._unregisterSlider(this);
  24. }
  25. Quaternion HandleSliderDisc::updateDelta(const Quaternion& oldValue) const
  26. {
  27. return oldValue;
  28. // TODO - Don't forget to consider currently active transform (and also custom handle transform)
  29. // - Both position and direction need to consider it
  30. }
  31. const Matrix4& HandleSliderDisc::getTransform() const
  32. {
  33. return mTransform * mTorusRotation;
  34. }
  35. }