Fix editor config working scene, fix entities being copy/pasted when using copy paste in a field. Fix filtered display for asset browser

This commit is contained in:
SHAM-DP 2023-02-28 15:12:17 +08:00
parent f57e9e9a91
commit e75826436f
6 changed files with 28 additions and 13 deletions

View File

@ -1,4 +0,0 @@
Start Maximized: true
Working Scene ID: 97158628
Window Size: {x: 1920, y: 1013}
Style: 0

View File

@ -254,7 +254,7 @@ namespace SHADE
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
}
ImRect SHAssetBrowser::DrawAsset(SHAsset const* const asset, FileExt const& ext /*= ""*/) noexcept
ImRect SHAssetBrowser::DrawAsset(SHAsset const* const asset, FileExt const& ext /*= ""*/, bool isSubAsset /*= false*/) noexcept
{
if (asset == nullptr)
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
@ -267,10 +267,20 @@ namespace SHADE
bool highlighted = false;
if(!filter.empty())
{
ImGui::SetNextItemOpen(true);
//ImGui::SetNextItemOpen(true);
if(SHStringUtilities::StringFindInsensitive(asset->name.data(), filter) == std::string::npos)
{
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
bool subAssetFiltered = false;
for (auto const& subAsset : asset->subAssets)
{
subAssetFiltered |= (SHStringUtilities::StringFindInsensitive(subAsset->name.data(), filter) != std::string::npos);
}
if(!subAssetFiltered)
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
else if(!asset->subAssets.empty())
{
ImGui::SetNextItemOpen(true);
}
}
else
{
@ -350,7 +360,12 @@ namespace SHADE
case AssetType::TEXTURE: break;
case AssetType::MESH: break;
case AssetType::SCENE:
editor->LoadScene(asset->id);
{
if(editor->LoadScene(asset->id))
{
editor->editorConfig->workingSceneID = asset->id;
}
}
break;
case AssetType::PREFAB: break;
case AssetType::MATERIAL:
@ -418,7 +433,7 @@ namespace SHADE
for(auto const& subAsset : asset->subAssets)
{
const float horizontalLineSize = 25.0f;
const ImRect childRect = DrawAsset(subAsset);
const ImRect childRect = DrawAsset(subAsset, "", true);
const float midPoint = (childRect.Min.y + childRect.Max.y) * 0.5f;
drawList->AddLine(ImVec2(vertLineStart.x, midPoint), ImVec2(vertLineStart.x + horizontalLineSize, midPoint), treeLineColor, 1);
vertLineEnd.y = midPoint;

View File

@ -24,7 +24,7 @@ namespace SHADE
ImRect RecursivelyDrawTree(FolderPointer folder);
void DrawCurrentFolder();
ImRect DrawFile(SHFile& file) noexcept;
ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "") noexcept;
ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "", bool isSubAsset = false) noexcept;
void DrawAssetBeingCreated() noexcept;
void DrawAssetBrowserFilter();

View File

@ -99,7 +99,7 @@ namespace SHADE
}
ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal);
if (!ImGui::IsAnyItemFocused())
if (!ImGui::IsAnyItemActive())
{
if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_A))
{

View File

@ -579,19 +579,23 @@ namespace SHADE
return false;
}
void SHEditor::LoadScene(AssetID const& assetID) noexcept
bool SHEditor::LoadScene(AssetID const& assetID) noexcept
{
if(shWindow->IsUnsavedChanges())
{
//Unsaved changes prompt
isUnsavedChangesPromptOpen = true;
sceneToLoad = assetID;
return false;
}
else
{
//Load the scene
sceneToLoad = 0;
editorConfig->workingSceneID = assetID;
SHConfigurationManager::SaveEditorConfig();
SHSceneManager::RestartScene(assetID);
return true;
}
}

View File

@ -115,7 +115,7 @@ namespace SHADE
bool SaveScene(std::string const& newSceneName = {});
void LoadScene(AssetID const& assetID) noexcept;
bool LoadScene(AssetID const& assetID) noexcept;
void Play();
void Pause();