Feature(Mirror): Scene asset type
This commit is contained in:
parent
83acc50f64
commit
d9b3d49059
7 changed files with 2058 additions and 16 deletions
2020
Assets/Scenes/demo.scene
Normal file
2020
Assets/Scenes/demo.scene
Normal file
File diff suppressed because it is too large
Load diff
BIN
EngineResources/Icons/Asset_Scene.png
Normal file
BIN
EngineResources/Icons/Asset_Scene.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.5 KiB |
|
@ -4,6 +4,7 @@ add_compile_definitions(LIGHT_PLATFORM_WINDOWS)
|
|||
|
||||
include_directories(
|
||||
${ENGINE_DIR}src/Engine/
|
||||
${MIRROR_DIR}/src/
|
||||
${ENGINE_DIR}src/Platform/GraphicsAPI/
|
||||
${ENGINE_DIR}src/Platform/OS/
|
||||
${DEPENDENCIES_DIR}entt/src/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "EditorLayer.hpp"
|
||||
|
||||
#include "Utility/Serializer.hpp"
|
||||
#include <Utility/Serializer.hpp>
|
||||
|
||||
namespace Light {
|
||||
|
||||
|
@ -11,7 +11,7 @@ EditorLayer::EditorLayer(const std::string& name, const std::vector<std::string>
|
|||
|
||||
m_PropertiesPanel = CreateRef<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());
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "Panels/ContentBrowser.hpp"
|
||||
#include "Panels/AssetBrowser.hpp"
|
||||
#include "Panels/PropertiesPanel.hpp"
|
||||
#include "Panels/SceneHierarchyPanel.hpp"
|
||||
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
#include "ContentBrowser.hpp"
|
||||
#include "Panels/AssetBrowser.hpp"
|
||||
|
||||
#include <LightEngine.hpp>
|
||||
#include <Utility/Serializer.hpp>
|
||||
#include <imgui.h>
|
||||
|
||||
namespace Light {
|
||||
|
||||
AssetBrowserPanel::AssetBrowserPanel()
|
||||
: m_CurrentDirectory("Assets"), m_AssetsPath("Assets")
|
||||
AssetBrowserPanel::AssetBrowserPanel(Ref<Scene> activeScene)
|
||||
: m_CurrentDirectory("Assets"), m_AssetsPath("Assets"), m_ActiveScene(activeScene)
|
||||
{
|
||||
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_Text", "EngineResources/Icons/Asset_Text.png");
|
||||
|
||||
m_DirectoryTexture = ResourceManager::GetTexture("_Assets_Directory");
|
||||
m_SceneTexture = ResourceManager::GetTexture("_Assets_Scene");
|
||||
m_ImageTexture = ResourceManager::GetTexture("_Assets_Image");
|
||||
m_TextTexture = ResourceManager::GetTexture("_Assets_Text");
|
||||
}
|
||||
|
@ -20,6 +24,7 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
|
|||
{
|
||||
ImGui::Begin("Content Browser");
|
||||
|
||||
// Parent directory button
|
||||
if (m_CurrentDirectory != std::filesystem::path("Assets"))
|
||||
{
|
||||
if (ImGui::Button(" <-- "))
|
||||
|
@ -28,7 +33,6 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
|
@ -38,10 +42,11 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
|
|||
m_DirectoryTexture->Bind(0u);
|
||||
for (auto& dirEntry : std::filesystem::directory_iterator(m_CurrentDirectory))
|
||||
{
|
||||
AssetType assetType;
|
||||
const auto& path = dirEntry.path();
|
||||
std::string extension = dirEntry.path().extension().string();
|
||||
|
||||
// TODO: Tidy up
|
||||
AssetType assetType;
|
||||
assetType = extension.empty() ? AssetType::Directory :
|
||||
|
||||
extension == ".txt" ? AssetType::Text :
|
||||
|
@ -49,23 +54,22 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
|
|||
|
||||
extension == ".png" ? AssetType::Image :
|
||||
|
||||
AssetType::None;
|
||||
extension == ".scene" ? AssetType::Scene :
|
||||
|
||||
// Unsupported asset type
|
||||
AssetType::None;
|
||||
|
||||
// Extension not supported
|
||||
if (assetType == AssetType::None)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const auto& path = dirEntry.path();
|
||||
auto relativePath = std::filesystem::relative(path, m_AssetsPath);
|
||||
std::string relativePathString = relativePath.string();
|
||||
|
||||
// Button
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::PushID(path.c_str());
|
||||
switch (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 }))
|
||||
{
|
||||
|
@ -73,18 +77,31 @@ void AssetBrowserPanel::OnUserInterfaceUpdate()
|
|||
}
|
||||
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:
|
||||
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;
|
||||
|
||||
// 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;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
|
@ -10,16 +10,17 @@ namespace Light {
|
|||
class AssetBrowserPanel: public Panel
|
||||
{
|
||||
private:
|
||||
enum AssetType
|
||||
enum class AssetType
|
||||
{
|
||||
None = 0,
|
||||
Scene,
|
||||
Directory,
|
||||
Text,
|
||||
Image,
|
||||
};
|
||||
|
||||
public:
|
||||
AssetBrowserPanel();
|
||||
AssetBrowserPanel(Ref<Scene> activeScene);
|
||||
|
||||
void OnUserInterfaceUpdate();
|
||||
|
||||
|
@ -31,7 +32,10 @@ private:
|
|||
uint32_t m_FileSize = 128u;
|
||||
uint32_t m_FilePadding = 8u;
|
||||
|
||||
Ref<Scene> m_ActiveScene;
|
||||
|
||||
Ref<Texture> m_DirectoryTexture;
|
||||
Ref<Texture> m_SceneTexture;
|
||||
Ref<Texture> m_ImageTexture;
|
||||
Ref<Texture> m_TextTexture;
|
||||
};
|
Loading…
Add table
Reference in a new issue