BsHandleManager.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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::update(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. queueDrawCommands();
  32. mDrawManager->draw(camera);
  33. }
  34. void HandleManager::setSettings(const EditorSettingsPtr& settings)
  35. {
  36. mSettings = settings;
  37. updateFromEditorSettings();
  38. }
  39. void HandleManager::updateFromEditorSettings()
  40. {
  41. setDefaultHandleSize(mSettings->getHandleSize());
  42. mSettingsHash = mSettings->getHash();
  43. }
  44. void HandleManager::trySelect(const CameraPtr& camera, const Vector2I& inputPos)
  45. {
  46. return mSliderManager->trySelect(camera, inputPos);
  47. }
  48. void HandleManager::clearSelection()
  49. {
  50. return mSliderManager->clearSelection();
  51. }
  52. float HandleManager::getHandleSize(const CameraPtr& camera, const Vector3& handlePos) const
  53. {
  54. Vector3 cameraPos = camera->getPosition();
  55. Vector3 diff = handlePos - cameraPos;
  56. float distAlongViewDir = Math::abs(diff.dot(camera->getRotation().zAxis()));
  57. return distAlongViewDir * mDefaultHandleSize;
  58. }
  59. }