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(
|
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/
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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;
|
||||||
};
|
};
|
Loading…
Add table
Reference in a new issue