BsHandleManager.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Handles/BsHandleManager.h"
  4. #include "Handles/BsHandleDrawManager.h"
  5. #include "Handles/BsHandleSliderManager.h"
  6. #include "Components/BsCCamera.h"
  7. #include "Scene/BsSceneObject.h"
  8. #include "Settings/BsEditorSettings.h"
  9. #include "Utility/BsTime.h"
  10. namespace bs
  11. {
  12. HandleManager::HandleManager()
  13. {
  14. mSliderManager = bs_new<HandleSliderManager>();
  15. mDrawManager = bs_new<HandleDrawManager>();
  16. }
  17. HandleManager::~HandleManager()
  18. {
  19. bs_delete(mSliderManager);
  20. bs_delete(mDrawManager);
  21. }
  22. bool HandleManager::isHandleActive(const SPtr<Camera>& camera) const
  23. {
  24. return mSliderManager->isSliderActive(camera);
  25. }
  26. void HandleManager::beginInput()
  27. {
  28. triggerPreInput();
  29. mInputStarted = true;
  30. }
  31. bool HandleManager::updateInput(const SPtr<Camera>& camera, const Vector2I& inputPos, const Vector2I& inputDelta)
  32. {
  33. if(!mInputStarted)
  34. {
  35. BS_LOG(Warning, Editor, "Updating handle input without calling beginInput() first. Input won't be processed.");
  36. return false;
  37. }
  38. if (mSettings != nullptr && mSettingsHash != mSettings->getHash())
  39. updateFromEditorSettings();
  40. return mSliderManager->update(camera, inputPos, inputDelta);
  41. }
  42. void HandleManager::endInput()
  43. {
  44. triggerPostInput();
  45. mInputStarted = false;
  46. }
  47. void HandleManager::draw(const SPtr<Camera>& camera)
  48. {
  49. UINT64 frameIdx = gTime().getFrameIdx();
  50. if (frameIdx != mLastDrawFrameIdx)
  51. {
  52. mDrawManager->clear();
  53. queueDrawCommands();
  54. mLastDrawFrameIdx = frameIdx;
  55. }
  56. mDrawManager->draw(camera);
  57. }
  58. void HandleManager::setSettings(const SPtr<EditorSettings>& settings)
  59. {
  60. mSettings = settings;
  61. updateFromEditorSettings();
  62. }
  63. void HandleManager::updateFromEditorSettings()
  64. {
  65. setDefaultHandleSize(mSettings->getHandleSize());
  66. mSettingsHash = mSettings->getHash();
  67. }
  68. bool HandleManager::trySelect(const SPtr<Camera>& camera, const Vector2I& inputPos)
  69. {
  70. return mSliderManager->trySelect(camera, inputPos);
  71. }
  72. void HandleManager::clearSelection(const SPtr<Camera>& camera)
  73. {
  74. return mSliderManager->clearSelection(camera);
  75. }
  76. float HandleManager::getHandleSize(const SPtr<Camera>& camera, const Vector3& handlePos) const
  77. {
  78. if (camera->getProjectionType() == PT_PERSPECTIVE)
  79. {
  80. const Transform& tfrm = camera->getTransform();
  81. Vector3 cameraPos = tfrm.getPosition();
  82. Vector3 diff = handlePos - cameraPos;
  83. float distAlongViewDir = Math::abs(diff.dot(tfrm.getRotation().zAxis()));
  84. return distAlongViewDir * mDefaultHandleSize;
  85. }
  86. else
  87. {
  88. return camera->getOrthoWindowHeight() * mDefaultHandleSize;
  89. }
  90. }
  91. }