Feature(Mirror): Scene asset type

This commit is contained in:
Light 2022-03-12 21:10:23 +03:30
parent 83acc50f64
commit d9b3d49059
7 changed files with 2058 additions and 16 deletions

2020
Assets/Scenes/demo.scene Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View file

@ -4,6 +4,7 @@ add_compile_definitions(LIGHT_PLATFORM_WINDOWS)
include_directories( include_directories(
${ENGINE_DIR}src/Engine/ ${ENGINE_DIR}src/Engine/
${MIRROR_DIR}/src/
${ENGINE_DIR}src/Platform/GraphicsAPI/ ${ENGINE_DIR}src/Platform/GraphicsAPI/
${ENGINE_DIR}src/Platform/OS/ ${ENGINE_DIR}src/Platform/OS/
${DEPENDENCIES_DIR}entt/src/ ${DEPENDENCIES_DIR}entt/src/

View file

@ -1,6 +1,6 @@
#include "EditorLayer.hpp" #include "EditorLayer.hpp"
#include "Utility/Serializer.hpp" #include <Utility/Serializer.hpp>
namespace Light { namespace Light {
@ -11,7 +11,7 @@ EditorLayer::EditorLayer(const std::string& name, const std::vector<std::string>
m_PropertiesPanel = CreateRef<PropertiesPanel>(); m_PropertiesPanel = CreateRef<PropertiesPanel>();
m_SceneHierarchyPanel = CreateRef<SceneHierarchyPanel>(m_Scene, m_PropertiesPanel); m_SceneHierarchyPanel = CreateRef<SceneHierarchyPanel>(m_Scene, m_PropertiesPanel);
m_ContentBrowserPanel = CreateRef<AssetBrowserPanel>(); m_ContentBrowserPanel = CreateRef<AssetBrowserPanel>(m_Scene);
m_Framebuffer = Framebuffer::Create({ 1, 1, 1 }, GraphicsContext::GetSharedContext()); m_Framebuffer = Framebuffer::Create({ 1, 1, 1 }, GraphicsContext::GetSharedContext());

View file

@ -1,6 +1,6 @@
#pragma once #pragma once
#include "Panels/ContentBrowser.hpp" #include "Panels/AssetBrowser.hpp"
#include "Panels/PropertiesPanel.hpp" #include "Panels/PropertiesPanel.hpp"
#include "Panels/SceneHierarchyPanel.hpp" #include "Panels/SceneHierarchyPanel.hpp"

View file

@ -1,17 +1,21 @@
#include "ContentBrowser.hpp" #include "Panels/AssetBrowser.hpp"
#include <LightEngine.hpp> #include <LightEngine.hpp>
#include <Utility/Serializer.hpp>
#include <imgui.h> #include <imgui.h>
namespace Light { namespace Light {
AssetBrowserPanel::AssetBrowserPanel() AssetBrowserPanel::AssetBrowserPanel(Ref<Scene> activeScene)
: m_CurrentDirectory("Assets"), m_AssetsPath("Assets") : m_CurrentDirectory("Assets"), m_AssetsPath("Assets"), m_ActiveScene(activeScene)
{ {
ResourceManager::LoadTexture("_Assets_Directory", "EngineResources/Icons/Asset_Directory.png"); ResourceManager::LoadTexture("_Assets_Directory", "EngineResources/Icons/Asset_Directory.png");
ResourceManager::LoadTexture("_Assets_Scene", "EngineResources/Icons/Asset_Scene.png");
ResourceManager::LoadTexture("_Assets_Image", "EngineResources/Icons/Asset_Image.png"); ResourceManager::LoadTexture("_Assets_Image", "EngineResources/Icons/Asset_Image.png");
ResourceManager::LoadTexture("_Assets_Text", "EngineResources/Icons/Asset_Text.png"); ResourceManager::LoadTexture("_Assets_Text", "EngineResources/Icons/Asset_Text.png");
m_DirectoryTexture = ResourceManager::GetTexture("_Assets_Directory"); m_DirectoryTexture = ResourceManager::GetTexture("_Assets_Directory");
m_SceneTexture = ResourceManager::GetTexture("_Assets_Scene");
m_ImageTexture = ResourceManager::GetTexture("_Assets_Image"); m_ImageTexture = ResourceManager::GetTexture("_Assets_Image");
m_TextTexture = ResourceManager::GetTexture("_Assets_Text"); m_TextTexture = ResourceManager::GetTexture("_Assets_Text");
} }
@ -20,6 +24,7 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
{ {
ImGui::Begin("Content Browser"); ImGui::Begin("Content Browser");
// Parent directory button
if (m_CurrentDirectory != std::filesystem::path("Assets")) if (m_CurrentDirectory != std::filesystem::path("Assets"))
{ {
if (ImGui::Button(" <-- ")) if (ImGui::Button(" <-- "))
@ -28,7 +33,6 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
} }
} }
ImVec2 regionAvail = ImGui::GetContentRegionAvail(); ImVec2 regionAvail = ImGui::GetContentRegionAvail();
uint32_t cellSize = m_FileSize + m_FilePadding; uint32_t cellSize = m_FileSize + m_FilePadding;
uint32_t columnCount = std::clamp(static_cast<uint32_t>(std::floor(regionAvail.x / cellSize)), 1u, 64u); uint32_t columnCount = std::clamp(static_cast<uint32_t>(std::floor(regionAvail.x / cellSize)), 1u, 64u);
@ -38,10 +42,11 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
m_DirectoryTexture->Bind(0u); m_DirectoryTexture->Bind(0u);
for (auto& dirEntry : std::filesystem::directory_iterator(m_CurrentDirectory)) for (auto& dirEntry : std::filesystem::directory_iterator(m_CurrentDirectory))
{ {
AssetType assetType; const auto& path = dirEntry.path();
std::string extension = dirEntry.path().extension().string(); std::string extension = dirEntry.path().extension().string();
// TODO: Tidy up // TODO: Tidy up
AssetType assetType;
assetType = extension.empty() ? AssetType::Directory : assetType = extension.empty() ? AssetType::Directory :
extension == ".txt" ? AssetType::Text : extension == ".txt" ? AssetType::Text :
@ -49,23 +54,22 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
extension == ".png" ? AssetType::Image : extension == ".png" ? AssetType::Image :
AssetType::None; extension == ".scene" ? AssetType::Scene :
// Unsupported asset type AssetType::None;
// Extension not supported
if (assetType == AssetType::None) if (assetType == AssetType::None)
{ {
continue; continue;
} }
const auto& path = dirEntry.path();
auto relativePath = std::filesystem::relative(path, m_AssetsPath);
std::string relativePathString = relativePath.string();
// Button // Button
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::PushID(path.c_str()); ImGui::PushID(path.c_str());
switch (assetType) switch (assetType)
{ {
// Directory
case AssetType::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 })) 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 }))
{ {
@ -73,18 +77,31 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
} }
break; break;
// 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: 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 })) 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; break;
// Text
case AssetType::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 })) 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; break;
default: default:
break; break;
} }

View file

@ -10,16 +10,17 @@ namespace Light {
class AssetBrowserPanel: public Panel class AssetBrowserPanel: public Panel
{ {
private: private:
enum AssetType enum class AssetType
{ {
None = 0, None = 0,
Scene,
Directory, Directory,
Text, Text,
Image, Image,
}; };
public: public:
AssetBrowserPanel(); AssetBrowserPanel(Ref<Scene> activeScene);
void OnUserInterfaceUpdate(); void OnUserInterfaceUpdate();
@ -31,7 +32,10 @@ private:
uint32_t m_FileSize = 128u; uint32_t m_FileSize = 128u;
uint32_t m_FilePadding = 8u; uint32_t m_FilePadding = 8u;
Ref<Scene> m_ActiveScene;
Ref<Texture> m_DirectoryTexture; Ref<Texture> m_DirectoryTexture;
Ref<Texture> m_SceneTexture;
Ref<Texture> m_ImageTexture; Ref<Texture> m_ImageTexture;
Ref<Texture> m_TextTexture; Ref<Texture> m_TextTexture;
}; };