BsHandleManager.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "BsHandleManager.h"
  2. #include "BsHandleDrawManager.h"
  3. #include "BsHandleSliderManager.h"
  4. #include "BsCamera.h"
  5. #include "BsSceneObject.h"
  6. #include "BsEditorSettings.h"
  7. namespace BansheeEngine
  8. {
  9. HandleManager::HandleManager()
  10. :mSliderManager(nullptr), mDrawManager(nullptr)
  11. {
  12. mSliderManager = bs_new<HandleSliderManager>();
  13. mDrawManager = bs_new<HandleDrawManager>();
  14. }
  15. HandleManager::~HandleManager()
  16. {
  17. bs_delete(mSliderManager);
  18. bs_delete(mDrawManager);
  19. }
  20. bool HandleManager::isHandleActive() const
  21. {
  22. return mSliderManager->isSliderActive();
  23. }
  24. void HandleManager::update(const CameraHandlerPtr& camera, const Vector2I& inputPos)
  25. {
  26. if (mSettings != nullptr && mSettingsHash != mSettings->getHash())
  27. updateFromProjectSettings();
  28. refreshHandles();
  29. mSliderManager->update(camera, inputPos);
  30. triggerHandles();
  31. queueDrawCommands();
  32. mDrawManager->draw(camera);
  33. }
  34. void HandleManager::updateFromProjectSettings()
  35. {
  36. setDefaultHandleSize(mSettings->getHandleSize());
  37. mSettingsHash = mSettings->getHash();
  38. }
  39. void HandleManager::trySelect(const CameraHandlerPtr& camera, const Vector2I& inputPos)
  40. {
  41. return mSliderManager->trySelect(camera, inputPos);
  42. }
  43. void HandleManager::clearSelection()
  44. {
  45. return mSliderManager->clearSelection();
  46. }
  47. float HandleManager::getHandleSize(const CameraHandlerPtr& camera, const Vector3& handlePos) const
  48. {
  49. Vector3 cameraPos = camera->getPosition();
  50. Vector3 diff = handlePos - cameraPos;
  51. float distAlongViewDir = diff.dot(camera->getRotation().zAxis());
  52. return mDefaultHandleSize / std::max(distAlongViewDir, 0.0001f);
  53. }
  54. }