44 lines
1.0 KiB
C++
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);
|
|
}
|
|
};
|