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