BsHandleManager.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "BsHandleManager.h"
  2. #include "BsHandleDrawManager.h"
  3. #include "BsHandleSliderManager.h"
  4. #include "BsCCamera.h"
  5. #include "BsSceneObject.h"
  6. #include "BsEditorSettings.h"
  7. namespace BansheeEngine
  8. {
  9. HandleManager::HandleManager()
  10. :mSliderManager(nullptr), mDrawManager(nullptr), mSettingsHash(0xFFFFFFFF)
  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::updateInput(const CameraPtr& camera, const Vector2I& inputPos, const Vector2I& inputDelta)
  25. {
  26. if (mSettings != nullptr && mSettingsHash != mSettings->getHash())
  27. updateFromEditorSettings();
  28. refreshHandles();
  29. mSliderManager->update(camera, inputPos, inputDelta);
  30. triggerHandles();
  31. }
  32. void HandleManager::draw(const CameraPtr& camera)
  33. {
  34. queueDrawCommands();
  35. mDrawManager->draw(camera);
  36. }
  37. void HandleManager::setSettings(const EditorSettingsPtr& settings)
  38. {
  39. mSettings = settings;
  40. updateFromEditorSettings();
  41. }
  42. void HandleManager::updateFromEditorSettings()
  43. {
  44. setDefaultHandleSize(mSettings->getHandleSize());
  45. mSettingsHash = mSettings->getHash();
  46. }
  47. void HandleManager::trySelect(const CameraPtr& camera, const Vector2I& inputPos)
  48. {
  49. return mSliderManager->trySelect(camera, inputPos);
  50. }
  51. void HandleManager::clearSelection()
  52. {
  53. return mSliderManager->clearSelection();
  54. }
  55. float HandleManager::getHandleSize(const CameraPtr& camera, const Vector3& handlePos) const
  56. {
  57. Vector3 cameraPos = camera->getPosition();
  58. Vector3 diff = handlePos - cameraPos;
  59. float distAlongViewDir = Math::abs(diff.dot(camera->getRotation().zAxis()));
  60. return distAlongViewDir * mDefaultHandleSize;
  61. }
  62. }