[Assets] Making AssetCatalog an AppComponent

This commit is contained in:
SweetId
2024-03-24 21:59:50 -04:00
parent 172d3ea720
commit 92179df553
7 changed files with 180 additions and 75 deletions

View File

@@ -0,0 +1,52 @@
#include <Nazara/Core/AssetCatalogAppComponent.hpp>
#include <Nazara/Core/Serialization.hpp>
namespace Nz
{
bool Serialize(SerializationContext& context, const AssetHeaderLite& header, TypeTag<AssetHeaderLite>)
{
Serialize(context, "name", header.name);
Serialize(context, "path", header.path);
return true;
}
bool Unserialize(SerializationContext& context, AssetHeaderLite* header, TypeTag<AssetHeaderLite>)
{
Unserialize(context, "name", &header->name);
Unserialize(context, "path", &header->path);
return true;
}
void AddFile(std::set<AssetHeaderLite>& container, Nz::Stream& stream)
{
AssetHeaderLite header;
auto json = JsonSerializationContext::LoadFromStream(stream);
if (!json)
return;
if (!Unserialize(*json, "", &header))
return;
header.path = stream.GetPath();
container.insert(header);
}
void AssetCatalogAppComponent::AddFolder(std::string_view folder)
{
auto& fs = GetApp().GetComponent<FilesystemAppComponent>();
auto directory = fs.GetDirectory(folder);
if (!directory)
return;
directory->Foreach([&](std::string_view, const VirtualDirectory::Entry& entry) {
if (std::holds_alternative<VirtualDirectory::FileEntry>(entry))
{
auto& file = std::get<VirtualDirectory::FileEntry>(entry);
if (file.stream->GetPath().extension() == ".nzasset")
AddFile(m_assets, *file.stream.get());
}
}, true);
}
}