BsHandleSliderLine.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "BsHandleSliderLine.h"
  2. #include "BsHandleManager.h"
  3. #include "BsHandleSliderManager.h"
  4. #include "BsCapsule.h"
  5. #include "BsLineSegment3.h"
  6. #include "BsSphere.h"
  7. namespace BansheeEngine
  8. {
  9. const float HandleSliderLine::CAPSULE_RADIUS = 0.2f;
  10. const float HandleSliderLine::SPHERE_RADIUS = 0.5f;
  11. HandleSliderLine::HandleSliderLine(const Vector3& direction, float length, float snapValue, bool fixedScale)
  12. :HandleSlider(fixedScale, snapValue), mLength(length)
  13. {
  14. mDirection = Vector3::normalize(direction);
  15. Vector3 start = Vector3::ZERO;
  16. Vector3 end = start + mDirection * length;
  17. Vector3 sphereCenter = start + mDirection * std::max(0.0f, length - SPHERE_RADIUS * 2);
  18. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  19. sliderManager._registerCapsuleCollider(Capsule(LineSegment3(start, end), CAPSULE_RADIUS), this);
  20. sliderManager._registerSphereCollider(Sphere(sphereCenter, SPHERE_RADIUS), this);
  21. }
  22. HandleSliderLine::~HandleSliderLine()
  23. {
  24. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  25. sliderManager._unregisterSlider(this);
  26. }
  27. Vector3 HandleSliderLine::updateDelta(const Vector3& oldValue) const
  28. {
  29. return oldValue;
  30. // TODO - Don't forget to consider currently active transform (and also custom handle transform)
  31. // - Both position and direction need to consider it
  32. }
  33. }