[Assets] Making AssetCatalog an AppComponent
This commit is contained in:
52
src/Nazara/Core/AssetCatalogAppComponent.cpp
Normal file
52
src/Nazara/Core/AssetCatalogAppComponent.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user