light/modules/mirror/src/editor_layer.cpp

110 lines
3 KiB
C++
Raw Normal View History

2025-07-05 13:28:41 +03:30
#include <engine/utils/serializer.hpp>
#include <mirror/editor_layer.hpp>
namespace Light {
2025-07-05 13:28:41 +03:30
EditorLayer::EditorLayer(const std::string &name): Layer(name), m_SceneDir("")
2022-03-04 22:40:20 +03:30
{
m_Scene = CreateRef<Scene>();
2025-07-05 13:28:41 +03:30
m_PropertiesPanel = CreateRef<PropertiesPanel>();
2022-03-04 22:40:20 +03:30
m_SceneHierarchyPanel = CreateRef<SceneHierarchyPanel>(m_Scene, m_PropertiesPanel);
2022-03-12 21:10:23 +03:30
m_ContentBrowserPanel = CreateRef<AssetBrowserPanel>(m_Scene);
2021-09-11 11:29:44 +04:30
2022-03-04 22:40:20 +03:30
m_Framebuffer = Framebuffer::Create({ 1, 1, 1 }, GraphicsContext::GetSharedContext());
2022-03-04 22:40:20 +03:30
if (m_SceneDir.empty())
{
m_CameraEntity = m_Scene->CreateEntity("Camera");
m_CameraEntity.AddComponent<CameraComponent>(SceneCamera(), true);
2022-03-04 22:40:20 +03:30
ResourceManager::LoadTexture("Awesomeface", "Assets/Textures/awesomeface.png");
Entity entity = m_Scene->CreateEntity("Awesomeface", {});
2025-07-05 13:28:41 +03:30
entity.AddComponent<SpriteRendererComponent>(
ResourceManager::GetTexture("Awesomeface"),
glm::vec4 { 0.0f, 1.0f, 1.0f, 1.0f }
);
2022-03-04 22:40:20 +03:30
}
else
{
SceneSerializer serializer(m_Scene);
2022-03-07 21:57:00 +03:30
ASSERT(serializer.Deserialize(m_SceneDir), "Failed to de-serialize: {}", m_SceneDir);
// m_CameraEntity = m_Scene->GetEntityByTag("Game Camera");
}
2022-03-04 22:40:20 +03:30
}
2022-03-04 22:40:20 +03:30
EditorLayer::~EditorLayer()
{
if (!m_SceneDir.empty())
{
2022-03-04 22:40:20 +03:30
SceneSerializer serializer(m_Scene);
serializer.Serialize(m_SceneDir);
}
2022-03-04 22:40:20 +03:30
}
2022-03-04 22:40:20 +03:30
void EditorLayer::OnUpdate(float deltaTime)
{
m_Scene->OnUpdate(deltaTime);
2022-03-04 22:40:20 +03:30
m_Direction.x = Input::GetKeyboardKey(Key::A) ? -1.0f :
Input::GetKeyboardKey(Key::D) ? 1.0f :
0.0f;
2022-03-04 22:40:20 +03:30
m_Direction.y = Input::GetKeyboardKey(Key::S) ? -1.0f :
Input::GetKeyboardKey(Key::W) ? 1.0f :
0.0f;
2025-07-05 13:28:41 +03:30
auto &cameraTranslation = m_CameraEntity.GetComponent<TransformComponent>().translation;
2022-03-04 22:40:20 +03:30
cameraTranslation += glm::vec3(m_Direction * m_Speed * deltaTime, 0.0f);
2022-03-04 22:40:20 +03:30
if (Input::GetKeyboardKey(Key::Escape))
Application::Quit();
}
2022-03-04 22:40:20 +03:30
void EditorLayer::OnRender()
{
m_Scene->OnRender(m_Framebuffer);
}
2022-03-04 22:40:20 +03:30
void EditorLayer::OnUserInterfaceUpdate()
{
UserInterface::DockspaceBegin();
ImGui::ShowDemoWindow();
if (ImGui::Begin("Game"))
{
2022-03-04 22:40:20 +03:30
Input::ReceiveGameEvents(ImGui::IsWindowFocused());
ImVec2 regionAvail = ImGui::GetContentRegionAvail();
2022-03-04 22:40:20 +03:30
if (m_AvailableContentRegionPrev != regionAvail)
{
2022-03-04 22:40:20 +03:30
m_Framebuffer->Resize({ regionAvail.x, regionAvail.y });
2025-07-05 13:28:41 +03:30
auto &camera = m_CameraEntity.GetComponent<CameraComponent>().camera;
2022-03-04 22:40:20 +03:30
camera.SetViewportSize(regionAvail.x, regionAvail.y);
m_AvailableContentRegionPrev = regionAvail;
}
if (GraphicsContext::GetGraphicsAPI() == GraphicsAPI::DirectX)
ImGui::Image(m_Framebuffer->GetColorAttachment(), regionAvail);
else
2025-07-05 13:28:41 +03:30
ImGui::Image(
m_Framebuffer->GetColorAttachment(),
regionAvail,
ImVec2(0, 1),
ImVec2(1, 0)
);
}
2022-03-04 22:40:20 +03:30
ImGui::End();
// Panels
m_SceneHierarchyPanel->OnUserInterfaceUpdate();
m_PropertiesPanel->OnUserInterfaceUpdate();
m_ContentBrowserPanel->OnUserInterfaceUpdate();
UserInterface::DockspaceEnd();
}
2022-03-04 22:40:20 +03:30
} // namespace Light