BsHandleSliderSphere.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2017 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Handles/BsHandleSliderSphere.h"
  4. #include "Handles/BsHandleManager.h"
  5. #include "Handles/BsHandleSliderManager.h"
  6. #include "Math/BsSphere.h"
  7. #include "Math/BsRay.h"
  8. namespace bs
  9. {
  10. HandleSliderSphere::HandleSliderSphere(float radius, bool fixedScale, UINT64 layer)
  11. : HandleSlider(fixedScale, layer)
  12. {
  13. mSphereCollider = Sphere(Vector3::ZERO, radius);
  14. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  15. sliderManager._registerSlider(this);
  16. }
  17. HandleSliderSphere::~HandleSliderSphere()
  18. {
  19. HandleSliderManager& sliderManager = HandleManager::instance().getSliderManager();
  20. sliderManager._unregisterSlider(this);
  21. }
  22. bool HandleSliderSphere::intersects(const Vector2I& screenPos, const Ray& ray, float& t) const
  23. {
  24. Ray localRay = ray;
  25. localRay.transformAffine(getTransformInv());
  26. auto intersect = mSphereCollider.intersects(localRay);
  27. t = std::numeric_limits<float>::max();
  28. if (intersect.first)
  29. {
  30. Vector3 intrPoint = localRay.getPoint(t);
  31. intrPoint = getTransform().multiplyAffine(intrPoint);
  32. t = (intrPoint - ray.getOrigin()).length(); // Get distance in world space
  33. return true;
  34. }
  35. return false;
  36. }
  37. void HandleSliderSphere::handleInput(const SPtr<Camera>& camera, const Vector2I& inputDelta)
  38. {
  39. // Do nothing
  40. }
  41. }