Called when the layer should render its ImGui components.
426 {
428
429 static bool dockspaceOpen = true;
430 static bool opt_fullscreen = true;
431 static bool opt_padding = false;
432 static ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_None;
433
434
435
436 ImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDocking;
437 if (opt_fullscreen)
438 {
439 const ImGuiViewport* viewport = ImGui::GetMainViewport();
440 ImGui::SetNextWindowPos(viewport->WorkPos);
441 ImGui::SetNextWindowSize(viewport->WorkSize);
442 ImGui::SetNextWindowViewport(viewport->ID);
443 ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
444 ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
445 window_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove;
446 window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus;
447 }
448
449
450
451 if (dockspace_flags & ImGuiDockNodeFlags_PassthruCentralNode)
452 window_flags |= ImGuiWindowFlags_NoBackground;
453
454
455
456
457
458
459 if (!opt_padding)
460 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
461 ImGui::Begin("DockSpace Demo", &dockspaceOpen, window_flags);
462 if (!opt_padding)
463 ImGui::PopStyleVar();
464
465 if (opt_fullscreen)
466 ImGui::PopStyleVar(2);
467
468
469 ImGuiIO& io = ImGui::GetIO();
470 ImGuiStyle& style = ImGui::GetStyle();
471 float minWinSize = style.WindowMinSize.x = 370.0f;
472
473 if (io.ConfigFlags & ImGuiConfigFlags_DockingEnable)
474 {
475 ImGuiID dockspace_id = ImGui::GetID("MyDockSpace");
476 ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags);
477 }
478
479 style.WindowMinSize.x = minWinSize;
480
481 if (ImGui::BeginMenuBar())
482 {
483 if (ImGui::BeginMenu("File"))
484 {
485
486
487
488 if (ImGui::MenuItem("New", "Ctrl+N"))
490
491
492 if (ImGui::MenuItem("Open..", "Ctrl+O"))
494
495
496 if (ImGui::MenuItem("Save As..", "Ctrl+Shift+S"))
498
499
500 if (ImGui::MenuItem("Reset Scene"))
502
503
504 if (ImGui::MenuItem("Exit"))
506
507 ImGui::EndMenu();
508 }
509
510 ImGui::EndMenuBar();
511 }
512
513 {
514 if (ImGui::Begin("Scenes"))
515 {
522 }
523 }
524 if (ImGui::Checkbox(
"Scene 1 - Basic Shapes", &
scene1)) {
529 }
530 }
531 if (ImGui::Checkbox(
"Scene 2 - Sprite Sheets", &
scene2)) {
536 }
537 }
538 if (ImGui::Checkbox(
"Scene 3 - Tile Map", &
scene3)) {
543 }
544 }
545 if (ImGui::Checkbox(
"Scene 4 - Particle System", &
scene4)) {
550 }
551 }
552 }
553 ImGui::End();
554 }
555
557
558 {
559 ImGui::Begin("Settings");
560 ImGui::Text("Renderer2D Stats:");
562 ImGui::Text("\tDraw Calls: %d", stats.DrawCalls);
563 ImGui::Text("\tQuad Count: %d", stats.QuadCount);
564 ImGui::Text("\tVertex Count: %d", stats.GetTotalVertexCount());
565 ImGui::Text("\tIndex Count: %d", stats.GetTotalIndexCount());
566 ImGui::Text("Application Settings:");
567 ImGui::Text("\tFPS: %.1f", ImGui::GetIO().Framerate);
568 if (ImGui::ColorEdit4(
"Background Color", glm::value_ptr(
m_ClearColor)))
569 {
571 }
572 ImGui::End();
573 }
574
576
577 {
578 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0,0 });
579 ImGui::Begin("Viewport");
583
584 ImVec2 viewportPanelSize = ImGui::GetContentRegionAvail();
585 if (
m_ViewportSize != *((glm::vec2*)&viewportPanelSize) && viewportPanelSize.x > 0.0f && viewportPanelSize.y > 0)
586 {
587 m_Framebuffer->Resize((uint32_t)viewportPanelSize.x, (uint32_t)viewportPanelSize.y);
589
591 }
592
593 ImVec2 viewportBoundsMin = ImGui::GetCursorScreenPos();
597
598 uint32_t textureID =
m_Framebuffer->GetColorAttachmentRendererID();
600
601
604 {
605 ImGuizmo::SetOrthographic(false);
606 ImGuizmo::SetDrawlist();
607 float windowWidth = (float)ImGui::GetWindowWidth();
608 float windowHeight = (float)ImGui::GetWindowHeight();
609 ImGuizmo::SetRect(ImGui::GetWindowPos().x, ImGui::GetWindowPos().y, windowWidth, windowHeight);
610
611
612
613
614
615
616
617
618
619 const glm::mat4& cameraProjection =
m_EditorCamera.GetProjection();
621
622
623 auto& tc = selectedEntity.GetComponent<TransformComponent>();
624 glm::mat4 transform = tc.GetTransform();
625
626
628
632 else if (
m_GizmoType == ImGuizmo::OPERATION::SCALE)
634
635 float snapValues[3] = { snapValue, snapValue, snapValue };
636
637 ImGuizmo::Manipulate(glm::value_ptr(cameraView), glm::value_ptr(cameraProjection),
638 (ImGuizmo::OPERATION)
m_GizmoType, ImGuizmo::LOCAL, glm::value_ptr(transform),
639 nullptr, snap ? snapValues : nullptr);
640
641 if (ImGuizmo::IsUsing())
642 {
643 glm::vec3 translation, rotation, scale;
645 tc.Translation = translation;
646 tc.Rotation = rotation;
647 tc.Scale = scale;
648 }
649 }
650
651 ImGui::End();
652 ImGui::PopStyleVar();
653 }
654 ImGui::End();
655 }
static Application & Get()
Retrieves the singleton instance of the Application.
Definition Application.h:67
ImGuiLayer * GetImGuiLayer()
Retrieves the ImGui layer.
Definition Application.h:64
void Close()
Closes the application.
Definition Application.cpp:55
bool m_ViewportFocused
Definition EditorLayer.h:44
float m_RotationSnap
Definition EditorLayer.h:51
void OpenScene()
Definition EditorLayer.cpp:728
glm::vec4 m_ClearColor
Definition EditorLayer.h:97
bool scene3
Definition EditorLayer.h:90
int m_GizmoType
Definition EditorLayer.h:50
bool scene4
Definition EditorLayer.h:90
float m_ScaleSnap
Definition EditorLayer.h:51
void NewScene()
Definition EditorLayer.cpp:721
float m_TranslationSnap
Definition EditorLayer.h:51
bool scene1
Definition EditorLayer.h:90
void SaveSceneAs()
Definition EditorLayer.cpp:744
bool useEntityScene
Definition EditorLayer.h:91
glm::vec2 m_ViewportBounds[2]
Definition EditorLayer.h:46
bool scene2
Definition EditorLayer.h:90
bool m_ViewportHovered
Definition EditorLayer.h:44
void ResetScene()
Definition EditorLayer.cpp:755
virtual void SetBlockEvents(bool block)
Definition ImGuiLayer.h:26
static void SetClearColor(const glm::vec4 &color)
Sets the clear color for the renderer.
Definition RenderCommand.h:26
static Statistics GetStats()
Retrieves the current rendering statistics.
Definition Renderer2D.cpp:502
@ LeftControl
Definition KeyCodes.h:140
bool DecomposeTransform(const glm::mat4 &transform, glm::vec3 &translation, glm::vec3 &rotation, glm::vec3 &scale)
Decomposes a transformation matrix into its translation, rotation, and scale components.
Definition Math.cpp:10
static void DisplayVesperInfo_ImGui()
Definition VesperImGui.h:7