EditorLayer.h¶
void OnScenePlay();
void OnSceneStop();
// UI Panels
void UI_Toolbar();
private:
enum class SceneState
{
Edit = 0, Play = 1
};
SceneState m_SceneState = SceneState::Edit;
//编辑器资源
Ref<Texture2D> m_IconPlay, m_IconStop;
EditorLayer.cpp¶
OnAttach
m_IconPlay = Texture2D::Create("Resources/Icons/PlayButton.png");
m_IconStop = Texture2D::Create("Resources/Icons/StopButton.png");
// Update
if (m_ViewportFocused)
m_CameraController.OnUpdate(ts);
//场景相机
m_EditorCamera.OnUpdate(ts)
// Update scene 拿到scene后,使用场景相机不断更新
m_ActiveScene->OnUpdateEditor(ts, m_EditorCamera);
switch (m_SceneState)
{
case SceneState::Edit:
{
if (m_ViewportFocused)
m_CameraController.OnUpdate(ts);
m_EditorCamera.OnUpdate(ts);
m_ActiveScene->OnUpdateEditor(ts, m_EditorCamera);
break;
}
case SceneState::Play:
{
m_ActiveScene->OnUpdateRuntime(ts);
break;
}
}
void EditorLayer::UI_Toolbar()
{
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 2));
ImGui::PushStyleVar(ImGuiStyleVar_ItemInnerSpacing, ImVec2(0, 0));
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
auto& colors = ImGui::GetStyle().Colors;
const auto& buttonHovered = colors[ImGuiCol_ButtonHovered];
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(buttonHovered.x, buttonHovered.y, buttonHovered.z, 0.5f));
const auto& buttonActive = colors[ImGuiCol_ButtonActive];
ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(buttonActive.x, buttonActive.y, buttonActive.z, 0.5f));
ImGui::Begin("##toolbar", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
float size = ImGui::GetWindowHeight() - 4.0f;
Ref<Texture2D> icon = m_SceneState == SceneState::Edit ? m_IconPlay : m_IconStop;
ImGui::SetCursorPosX((ImGui::GetWindowContentRegionMax().x * 0.5f) - (size * 0.5f));
if (ImGui::ImageButton((ImTextureID)icon->GetRendererID(), ImVec2(size, size), ImVec2(0, 0), ImVec2(1, 1), 0))
{
if (m_SceneState == SceneState::Edit)
OnScenePlay();
else if (m_SceneState == SceneState::Play)
OnSceneStop();
}
ImGui::PopStyleVar(2);
ImGui::PopStyleColor(3);
ImGui::End();
}
实现效果¶
切换按钮切换到主相机渲染