BsMainEditorWindow.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "BsMainEditorWindow.h"
  2. #include "BsEditorWindowManager.h"
  3. #include "BsDockManager.h"
  4. #include "BsGUIMenuBar.h"
  5. #include "BsCamera.h"
  6. #include "CmSceneObject.h"
  7. #include "CmRenderTexture.h"
  8. #include "BsApplication.h"
  9. #include "CmProfiler.h"
  10. #include "BsGUIArea.h"
  11. #include "BsGUILayout.h"
  12. // DEBUG ONLY
  13. #include "CmTestTextSprite.h"
  14. #include "CmDebugCamera.h"
  15. #include "BsDrawHelper2D.h"
  16. #include "BsDrawHelper3D.h"
  17. #include "CmRectF.h"
  18. #include "BsProfilerOverlay.h"
  19. #include "CmPlatform.h"
  20. using namespace CamelotFramework;
  21. using namespace BansheeEngine;
  22. namespace BansheeEditor
  23. {
  24. MainEditorWindow* MainEditorWindow::create(const CM::RenderWindowPtr& renderWindow)
  25. {
  26. return EditorWindowManager::instance().createMain(renderWindow);
  27. }
  28. MainEditorWindow::MainEditorWindow(const CM::RenderWindowPtr& renderWindow)
  29. :EditorWindowBase(renderWindow), mDockManager(nullptr),
  30. mMenuBar(cm_new<GUIMenuBar>(mGUI.get(), mRenderWindow.get()))
  31. {
  32. mDockManager = DockManager::create(mRenderWindow.get());
  33. GUIArea* dockArea = GUIArea::createStretchedXY(*mGUI.get(), 0, 0, 0, 0);
  34. dockArea->getLayout().addElement(mDockManager);
  35. updateAreas();
  36. mMenuBar->addMenuItem(L"File/New project", nullptr);
  37. mMenuBar->addMenuItem(L"File/Open project", nullptr);
  38. mMenuBar->addSeparator(L"File");
  39. mMenuBar->addMenuItem(L"File/Recent projects/Project A", nullptr);
  40. mMenuBar->addMenuItem(L"File/Recent projects/Project B", nullptr);
  41. mMenuBar->addMenuItem(L"File/Recent projects/Project C", nullptr);
  42. mMenuBar->addSeparator(L"File");
  43. mMenuBar->addMenuItem(L"File/Exit", nullptr);
  44. mMenuBar->addMenuItem(L"Window/Scene", nullptr);
  45. // DEBUG ONLY
  46. HSceneObject sceneCameraGO = SceneObject::create("SceneCamera");
  47. HCamera sceneCamera = sceneCameraGO->addComponent<Camera>();
  48. RenderTexturePtr sceneRenderTarget = RenderTexture::create(TEX_TYPE_2D, 800, 600);
  49. sceneRenderTarget->setPriority(1);
  50. sceneCamera->initialize(sceneRenderTarget, 0.0f, 0.0f, 1.0f, 1.0f);
  51. sceneCamera->setPriority(1);
  52. sceneCameraGO->setPosition(Vector3(0,50,1240));
  53. sceneCameraGO->lookAt(Vector3(0,50,-300));
  54. sceneCamera->setNearClipDistance(5);
  55. sceneCamera->setAspectRatio(800.0f / 600.0f);
  56. GameObjectHandle<DebugCamera> debugCamera = sceneCameraGO->addComponent<DebugCamera>();
  57. GameObjectHandle<TestTextSprite> textSprite = mSceneObject->addComponent<TestTextSprite>(mCamera->getViewport().get());
  58. textSprite->init(sceneCamera, "Testing in a new row, does this work?", sceneRenderTarget);
  59. //DrawHelper2D::instance().drawQuad(sceneCamera, FRect(0.0f, 0.2f, 0.75f, 0.5f), Color::White, DebugDrawCoordType::Normalized, 250.0f);
  60. //DrawHelper2D::instance().drawQuad(sceneCamera, FRect(50.0f, 50.0f, 100.0f, 50.0f), Color::Blue, DebugDrawCoordType::Pixel, 250.0f);
  61. //DrawHelper2D::instance().drawLine_Pixel(sceneCamera, Vector2(0, 0), Vector2(20, 20), Color::Blue, DebugDrawCoordType::Pixel, 250.0f);
  62. //DrawHelper2D::instance().drawLine_AA(sceneCamera, Vector2(100, 10), Vector2(120, 40), 1.0f, 1.0f, Color::Blue, DebugDrawCoordType::Pixel, 250.0f);
  63. AABox dbgBox(Vector3(-300, -200, 1000), Vector3(300, 300, 1500));
  64. //DrawHelper3D::instance().drawAABox(sceneCamera, dbgBox, Color::Green, 250.0f);
  65. ProfilerOverlay::startUp(cm_new<ProfilerOverlay>(sceneCamera->getViewport()));
  66. ProfilerOverlay::instance().show();
  67. }
  68. MainEditorWindow::~MainEditorWindow()
  69. {
  70. ProfilerOverlay::shutDown();
  71. GUIElement::destroy(mDockManager);
  72. cm_delete(mMenuBar);
  73. }
  74. void MainEditorWindow::resized()
  75. {
  76. EditorWindowBase::resized();
  77. updateAreas();
  78. }
  79. void MainEditorWindow::updateAreas()
  80. {
  81. UINT32 widgetWidth = (UINT32)std::max(0, (INT32)getWidth() - 2);
  82. UINT32 widgetHeight = (UINT32)std::max(0, (INT32)getHeight() - 2);
  83. UINT32 menuBarHeight = 15;
  84. mMenuBar->setArea(1, 1, widgetWidth, menuBarHeight);
  85. UINT32 dockHeight = (UINT32)std::max(0, (INT32)widgetHeight - (INT32)menuBarHeight);
  86. mDockManager->setArea(1, menuBarHeight + 1, widgetWidth, dockHeight);
  87. }
  88. void MainEditorWindow::update()
  89. {
  90. mDockManager->update();
  91. //PROFILE_CALL(ProfilerOverlay::instance().update(), "ProfilerOverlay");
  92. }
  93. }