Files
FlaxEngine/Source/Engine/Content/AssetsContainer.h
2025-11-18 16:11:31 +01:00

44 lines
1.0 KiB
C++

// Copyright (c) Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/Collections/Array.h"
#include "Engine/Content/AssetReference.h"
#include "Asset.h"
/// <summary>
/// Assets Container allows to load collection of assets and keep references to them.
/// </summary>
class AssetsContainer : public Array<AssetReference<Asset>>
{
public:
/// <summary>
/// Loads an asset.
/// </summary>
/// <param name="id">The asset id.</param>
/// <returns>Loaded asset of null.</returns>
template<typename T>
T* Load(const Guid& id)
{
for (auto& e : *this)
{
if (e.GetID() == id)
return (T*)e.Get();
}
auto asset = (T*)::LoadAsset(id, T::TypeInitializer);
if (asset && !asset->WaitForLoaded())
Add(asset);
else
asset = nullptr;
return asset;
}
/// <summary>
/// Release all referenced assets.
/// </summary>
void ReleaseAll()
{
Resize(0);
}
};