Merge commit '07610a5af2aaaac9cfcdcf8359b33f7df40d46cd'
All checks were successful
Build / build (push) Successful in 3m15s
All checks were successful
Build / build (push) Successful in 3m15s
This commit is contained in:
commit
1ba64cb5d8
1
deps/ox/src/ox/std/CMakeLists.txt
vendored
1
deps/ox/src/ox/std/CMakeLists.txt
vendored
@ -109,6 +109,7 @@ install(
|
|||||||
error.hpp
|
error.hpp
|
||||||
fmt.hpp
|
fmt.hpp
|
||||||
hardware.hpp
|
hardware.hpp
|
||||||
|
hash.hpp
|
||||||
hashmap.hpp
|
hashmap.hpp
|
||||||
heapmgr.hpp
|
heapmgr.hpp
|
||||||
ignore.hpp
|
ignore.hpp
|
||||||
|
@ -196,15 +196,15 @@ class AssetManager {
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
class AssetTypeManager: public AssetTypeManagerBase {
|
class AssetTypeManager: public AssetTypeManagerBase {
|
||||||
public:
|
public:
|
||||||
using Loader = std::function<ox::Result<T>(ox::StringView assetId)>;
|
using Loader = std::function<ox::Result<T>(ox::StringViewCR assetId)>;
|
||||||
private:
|
private:
|
||||||
Loader m_loader{};
|
Loader m_loader{};
|
||||||
ox::HashMap<ox::String, ox::UPtr<AssetContainer<T>>> m_cache;
|
ox::HashMap<ox::String, ox::UPtr<AssetContainer<T>>> m_cache;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AssetTypeManager(Loader loader) noexcept: m_loader(loader) {}
|
AssetTypeManager(Loader &&loader) noexcept: m_loader(std::move(loader)) {}
|
||||||
|
|
||||||
ox::Result<AssetRef<T>> getAsset(ox::StringView const assetId) const noexcept {
|
ox::Result<AssetRef<T>> getAsset(ox::StringViewCR assetId) const noexcept {
|
||||||
OX_REQUIRE(out, m_cache.at(assetId));
|
OX_REQUIRE(out, m_cache.at(assetId));
|
||||||
if (!out || !*out) {
|
if (!out || !*out) {
|
||||||
return ox::Error(1, "asset is null");
|
return ox::Error(1, "asset is null");
|
||||||
@ -212,7 +212,7 @@ class AssetManager {
|
|||||||
return AssetRef<T>(out->get());
|
return AssetRef<T>(out->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Result<AssetRef<T>> loadAsset(ox::StringView const assetId) noexcept {
|
ox::Result<AssetRef<T>> loadAsset(ox::StringViewCR assetId) noexcept {
|
||||||
auto &p = m_cache[assetId];
|
auto &p = m_cache[assetId];
|
||||||
OX_REQUIRE_M(obj, m_loader(assetId));
|
OX_REQUIRE_M(obj, m_loader(assetId));
|
||||||
if (!p) {
|
if (!p) {
|
||||||
@ -224,7 +224,7 @@ class AssetManager {
|
|||||||
return AssetRef<T>(p.get());
|
return AssetRef<T>(p.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Error reloadAsset(ox::StringView const assetId) noexcept {
|
ox::Error reloadAsset(ox::StringViewCR assetId) noexcept {
|
||||||
auto &p = m_cache[assetId];
|
auto &p = m_cache[assetId];
|
||||||
OX_REQUIRE_M(obj, m_loader(assetId));
|
OX_REQUIRE_M(obj, m_loader(assetId));
|
||||||
if (!p) {
|
if (!p) {
|
||||||
@ -247,7 +247,7 @@ class AssetManager {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ox::HashMap<ox::String, ox::UPtr<AssetTypeManagerBase>> m_assetTypeManagers;
|
ox::HashMap<ox::String, ox::UPtr<AssetTypeManagerBase>> m_assetTypeManagers;
|
||||||
ox::HashMap<ox::String, ox::Signal<ox::Error(ox::StringView assetId)>> m_fileUpdated;
|
ox::HashMap<ox::String, ox::Signal<ox::Error(ox::StringViewCR assetId)>> m_fileUpdated;
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ox::Result<AssetTypeManager<T>*> getTypeManager() noexcept {
|
ox::Result<AssetTypeManager<T>*> getTypeManager() noexcept {
|
||||||
@ -273,18 +273,18 @@ class AssetManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ox::Result<AssetRef<T>> getAsset(ox::StringView assetId) noexcept {
|
ox::Result<AssetRef<T>> getAsset(ox::StringViewCR assetId) noexcept {
|
||||||
OX_REQUIRE(m, getTypeManager<T>());
|
OX_REQUIRE(m, getTypeManager<T>());
|
||||||
return m->getAsset(assetId);
|
return m->getAsset(assetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Error reloadAsset(ox::StringView assetId) noexcept {
|
ox::Error reloadAsset(ox::StringViewCR assetId) noexcept {
|
||||||
m_fileUpdated[assetId].emit(assetId);
|
m_fileUpdated[assetId].emit(assetId);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ox::Result<AssetRef<T>> loadAsset(ox::StringView assetId) noexcept {
|
ox::Result<AssetRef<T>> loadAsset(ox::StringViewCR assetId) noexcept {
|
||||||
OX_REQUIRE(m, getTypeManager<T>());
|
OX_REQUIRE(m, getTypeManager<T>());
|
||||||
OX_REQUIRE(out, m->loadAsset(assetId));
|
OX_REQUIRE(out, m->loadAsset(assetId));
|
||||||
m_fileUpdated[assetId].connect(m, &AssetTypeManager<T>::reloadAsset);
|
m_fileUpdated[assetId].connect(m, &AssetTypeManager<T>::reloadAsset);
|
||||||
|
Loading…
Reference in New Issue
Block a user