light/Mirror/src/Panels/AssetBrowser.cpp

119 lines
3.7 KiB
C++
Raw Normal View History

2022-03-12 21:10:23 +03:30
#include "Panels/AssetBrowser.hpp"
2022-03-08 21:19:19 +03:30
#include <LightEngine.hpp>
2022-03-12 21:10:23 +03:30
#include <Utility/Serializer.hpp>
#include <imgui.h>
namespace Light {
2022-03-12 21:10:23 +03:30
AssetBrowserPanel::AssetBrowserPanel(Ref<Scene> activeScene)
: m_CurrentDirectory("Assets"), m_AssetsPath("Assets"), m_ActiveScene(activeScene)
2022-03-06 22:25:23 +03:30
{
ResourceManager::LoadTexture("_Assets_Directory", "EngineResources/Icons/Asset_Directory.png");
2022-03-12 21:10:23 +03:30
ResourceManager::LoadTexture("_Assets_Scene", "EngineResources/Icons/Asset_Scene.png");
ResourceManager::LoadTexture("_Assets_Image", "EngineResources/Icons/Asset_Image.png");
ResourceManager::LoadTexture("_Assets_Text", "EngineResources/Icons/Asset_Text.png");
2022-03-12 21:10:23 +03:30
m_DirectoryTexture = ResourceManager::GetTexture("_Assets_Directory");
2022-03-12 21:10:23 +03:30
m_SceneTexture = ResourceManager::GetTexture("_Assets_Scene");
m_ImageTexture = ResourceManager::GetTexture("_Assets_Image");
m_TextTexture = ResourceManager::GetTexture("_Assets_Text");
2022-03-06 22:25:23 +03:30
}
void AssetBrowserPanel::OnUserInterfaceUpdate()
2022-03-04 22:40:20 +03:30
{
ImGui::Begin("Content Browser");
2022-03-12 21:10:23 +03:30
// Parent directory button
2022-03-04 22:40:20 +03:30
if (m_CurrentDirectory != std::filesystem::path("Assets"))
{
if (ImGui::Button(" <-- "))
{
2022-03-04 22:40:20 +03:30
m_CurrentDirectory = m_CurrentDirectory.parent_path();
}
2022-03-04 22:40:20 +03:30
}
2022-03-06 22:25:23 +03:30
ImVec2 regionAvail = ImGui::GetContentRegionAvail();
uint32_t cellSize = m_FileSize + m_FilePadding;
uint32_t columnCount = std::clamp(static_cast<uint32_t>(std::floor(regionAvail.x / cellSize)), 1u, 64u);
if (ImGui::BeginTable("ContentBrowser", columnCount))
2022-03-04 22:40:20 +03:30
{
m_DirectoryTexture->Bind(0u);
2022-03-06 22:25:23 +03:30
for (auto& dirEntry : std::filesystem::directory_iterator(m_CurrentDirectory))
{
2022-03-12 21:10:23 +03:30
const auto& path = dirEntry.path();
2022-03-06 22:25:23 +03:30
std::string extension = dirEntry.path().extension().string();
// TODO: Tidy up
2022-03-12 21:10:23 +03:30
AssetType assetType;
assetType = extension.empty() ? AssetType::Directory :
extension == ".txt" ? AssetType::Text :
extension == ".glsl" ? AssetType::Text :
extension == ".png" ? AssetType::Image :
2022-03-12 21:10:23 +03:30
extension == ".scene" ? AssetType::Scene :
AssetType::None;
2022-03-12 21:10:23 +03:30
// Extension not supported
if (assetType == AssetType::None)
{
continue;
}
2022-03-06 22:25:23 +03:30
// Button
ImGui::TableNextColumn();
ImGui::PushID(path.c_str());
switch (assetType)
{
2022-03-12 21:10:23 +03:30
// Directory
case AssetType::Directory:
if (ImGui::ImageButton(m_DirectoryTexture->GetTexture(), ImVec2(m_FileSize, m_FileSize), ImVec2 { 0.0f, 0.0f }, ImVec2 { 1.0f, 1.0f }, 0, ImVec4 { 0.0f, 0.0f, 0.0f, 0.0f }, ImVec4 { 1.0f, 1.0f, 1.0f, 1.0f }))
{
m_CurrentDirectory /= path.filename();
}
break;
2022-03-12 21:10:23 +03:30
// Scene
case AssetType::Scene:
if (ImGui::ImageButton(m_SceneTexture->GetTexture(), ImVec2(m_FileSize, m_FileSize), ImVec2 { 0.0f, 0.0f }, ImVec2 { 1.0f, 1.0f }, 0, ImVec4 { 0.0f, 0.0f, 0.0f, 0.0f }, ImVec4 { 1.0f, 1.0f, 1.0f, 1.0f }))
{
SceneSerializer serializer(m_ActiveScene);
LOG(info, "Attempting to deserialize: {}", path.string());
serializer.Deserialize(path.string());
}
break;
// Image
case AssetType::Image:
if (ImGui::ImageButton(m_ImageTexture->GetTexture(), ImVec2(m_FileSize, m_FileSize), ImVec2 { 0.0f, 0.0f }, ImVec2 { 1.0f, 1.0f }, 0, ImVec4 { 0.0f, 0.0f, 0.0f, 0.0f }, ImVec4 { 1.0f, 1.0f, 1.0f, 1.0f }))
{
}
break;
2022-03-06 22:25:23 +03:30
2022-03-12 21:10:23 +03:30
// Text
case AssetType::Text:
if (ImGui::ImageButton(m_TextTexture->GetTexture(), ImVec2(m_FileSize, m_FileSize), ImVec2 { 0.0f, 0.0f }, ImVec2 { 1.0f, 1.0f }, 0, ImVec4 { 0.0f, 0.0f, 0.0f, 0.0f }, ImVec4 { 1.0f, 1.0f, 1.0f, 1.0f }))
{
}
break;
2022-03-12 21:10:23 +03:30
default:
break;
}
// Label
ImGui::Text("%s", path.filename().c_str());
ImGui::PopID();
}
2022-03-06 22:25:23 +03:30
ImGui::EndTable();
}
2022-03-06 22:25:23 +03:30
ImGui::End();
2022-03-04 22:40:20 +03:30
}
2022-03-04 22:40:20 +03:30
} // namespace Light