添加场景在运行时会临时复制一个场景功能,添加克隆实体功能
This commit is contained in:
@ -280,7 +280,8 @@ namespace Hazel
|
||||
const float windowWidth = ImGui::GetWindowWidth();
|
||||
const float windowHeight = ImGui::GetWindowHeight();
|
||||
|
||||
const ImVec2 windowPos = ImGui::GetWindowPos();
|
||||
ImVec2 windowPos = ImGui::GetWindowPos();
|
||||
windowPos.y += m_ViewPortSize.y - windowsSize.y;
|
||||
|
||||
ImGuizmo::SetRect(windowPos.x, windowPos.y, windowWidth, windowHeight);
|
||||
|
||||
@ -366,12 +367,30 @@ namespace Hazel
|
||||
|
||||
void EditorLayer::OpenScene(const std::filesystem::path& scenePath)
|
||||
{
|
||||
if (m_SceneState != SceneState::Edit)
|
||||
OnSceneStop();
|
||||
|
||||
Ref<Scene> newScene = CreateRef<Scene>();
|
||||
SceneSerializer serializer(newScene);
|
||||
if (serializer.Deserialize(scenePath.string()))
|
||||
{
|
||||
m_EditorScene = newScene;
|
||||
m_EditorScene->OnViewportResize((uint32_t)m_ViewPortSize.x, (uint32_t)m_ViewPortSize.y);
|
||||
|
||||
m_ActiveScene = m_EditorScene;
|
||||
|
||||
m_SceneHierachyPanel.SetContext(m_ActiveScene);
|
||||
}
|
||||
|
||||
/*
|
||||
m_ActiveScene = CreateRef<Scene>();
|
||||
m_ActiveScene->OnViewportResize((uint32_t)m_ViewPortSize.x, (uint32_t)m_ViewPortSize.y);
|
||||
m_SceneHierachyPanel.SetContext(m_ActiveScene);
|
||||
|
||||
SceneSerializer serializer(m_ActiveScene);
|
||||
serializer.Deserialize(scenePath.string());
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
void EditorLayer::NewScene()
|
||||
@ -381,6 +400,34 @@ namespace Hazel
|
||||
m_SceneHierachyPanel.SetContext(m_ActiveScene);
|
||||
}
|
||||
|
||||
void EditorLayer::OnDuplicateEntity()
|
||||
{
|
||||
if (m_SceneState != SceneState::Edit)
|
||||
return;
|
||||
Entity selectedEntity = m_SceneHierachyPanel.GetSelectedEntity();
|
||||
if (selectedEntity)
|
||||
m_EditorScene->DuplicateEntity(selectedEntity);
|
||||
}
|
||||
|
||||
void EditorLayer::OnScenePlay()
|
||||
{
|
||||
m_SceneState = SceneState::Play;
|
||||
|
||||
m_ActiveScene = Scene::Copy(m_EditorScene);
|
||||
m_ActiveScene->OnRuntimeStart();
|
||||
|
||||
m_SceneHierachyPanel.SetContext(m_ActiveScene);
|
||||
}
|
||||
|
||||
void EditorLayer::OnSceneStop()
|
||||
{
|
||||
m_SceneState = SceneState::Edit;
|
||||
m_ActiveScene->OnRuntimeStop();
|
||||
m_ActiveScene = m_EditorScene;
|
||||
|
||||
m_SceneHierachyPanel.SetContext(m_ActiveScene);
|
||||
}
|
||||
|
||||
void EditorLayer::ChangeOptMode(unsigned int mode)
|
||||
{
|
||||
if (m_ViewportHovered)
|
||||
@ -401,11 +448,12 @@ namespace Hazel
|
||||
#define SHORTCUT_NEW (SDL_KMOD_CTRL | SDLK_N)
|
||||
#define SHORTCUT_OPEN (SDL_KMOD_CTRL | SDLK_O)
|
||||
#define SHORTCUT_SAVE_ALL (SDL_KMOD_CTRL | SDL_KMOD_SHIFT | SDLK_S)
|
||||
#define SHORTCUT_CTRL_D (SDL_KMOD_CTRL | SDLK_D)
|
||||
|
||||
const auto mod = SDL_GetModState();
|
||||
const auto ctrl = (mod & SDL_KMOD_CTRL) ? SDL_KMOD_CTRL : 0;
|
||||
const auto shift = (mod & SDL_KMOD_SHIFT) ? SDL_KMOD_SHIFT : 0;
|
||||
|
||||
if (e.key.down && e.key.repeat == 0)
|
||||
switch (ctrl | shift | e.key.key)
|
||||
{
|
||||
case SHORTCUT_EXIT:
|
||||
@ -420,6 +468,9 @@ namespace Hazel
|
||||
case SHORTCUT_SAVE_ALL:
|
||||
SaveScene();
|
||||
break;
|
||||
case SHORTCUT_CTRL_D:
|
||||
OnDuplicateEntity();
|
||||
break;
|
||||
|
||||
// GIZMO
|
||||
case SDLK_Q:
|
||||
@ -475,15 +526,4 @@ namespace Hazel
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
void EditorLayer::OnScenePlay()
|
||||
{
|
||||
m_SceneState = SceneState::Play;
|
||||
m_ActiveScene->OnRuntimeStart();
|
||||
}
|
||||
|
||||
void EditorLayer::OnSceneStop()
|
||||
{
|
||||
m_SceneState = SceneState::Edit;
|
||||
m_ActiveScene->OnRuntimeStop();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user