@@ -201,7 +201,8 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
201
201
@see IAssetLoader
202
202
@see SAssetBundle
203
203
*/
204
- SAssetBundle getAssetInHierarchy (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
204
+ template <bool RestoreWholeBundle>
205
+ SAssetBundle getAssetInHierarchy_impl (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
205
206
{
206
207
const uint32_t restoreLevels = (_hierarchyLevel >= _params.restoreLevels ) ? 0u : (_params.restoreLevels - _hierarchyLevel);
207
208
@@ -267,7 +268,14 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
267
268
_override->insertAssetIntoCache (bundle, filename, ctx, _hierarchyLevel);
268
269
}
269
270
270
- if (bundle.getContents ().empty () /* || none of req levels is dummy*/ )
271
+ auto whole_bundle_not_dummy = [restoreLevels](const SAssetBundle& _b) {
272
+ auto rng = _b.getContents ();
273
+ for (const auto & a : rng)
274
+ if (a->isAnyDependencyDummy (restoreLevels))
275
+ return false ;
276
+ return true ;
277
+ };
278
+ if (bundle.getContents ().empty () || whole_bundle_not_dummy (bundle))
271
279
return bundle;
272
280
273
281
if (restoreLevels)
@@ -286,30 +294,37 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
286
294
reloadParams.restoreLevels = 0u ; // make sure it wont turn into infinite recursion
287
295
reloadParams.reload = true ; // TODO (consider): alternative to this flag: another method in override just to let user choose asset for restore
288
296
}
289
- IAssetLoader::SAssetLoadContext ctx (params, file);
290
- auto asset = _override->chooseDefaultAsset (bundle, ctx);
291
- if (!asset->isAnyDependencyDummy (restoreLevels - 1u ))
292
- return bundle;
293
297
294
- auto reloadBundle = getAssetInHierarchy (_file, _supposedFilename, reloadParams, _hierarchyLevel, _override);
298
+ auto reloadBundle = getAssetInHierarchy_impl<RestoreWholeBundle> (_file, _supposedFilename, reloadParams, _hierarchyLevel, _override);
295
299
296
- bool restoreSucceeded = _override->handleRestore (std::move (asset), bundle, reloadBundle, restoreLevels);
297
- if (!restoreSucceeded) // hm? return empty bundle if restore was requested, but did not succeeded? or just return the bundle? (TODO consider)
298
- return {};
300
+ if constexpr (RestoreWholeBundle)
301
+ {
302
+ IAssetLoader::SAssetLoadContext ctx (params, file);
303
+ auto asset = _override->chooseDefaultAsset (bundle, ctx);
304
+
305
+ // user responsible for checking if assets he wanted to be restored are in fact restored
306
+ _override->handleRestore (std::move (asset), bundle, reloadBundle, restoreLevels);
307
+ }
308
+ else
309
+ {
310
+ // user responsible for checking if assets he wanted to be restored are in fact restored
311
+ _override->handleRestore (bundle, reloadBundle, restoreLevels);
312
+ }
299
313
}
300
314
301
315
return bundle;
302
316
}
303
317
// TODO change name
304
- SAssetBundle getAssetInHierarchy (const std::string& _filePath, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
318
+ template <bool RestoreWholeBundle>
319
+ SAssetBundle getAssetInHierarchy_impl (const std::string& _filePath, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
305
320
{
306
321
IAssetLoader::SAssetLoadContext ctx (_params, nullptr );
307
322
308
323
std::string filePath = _filePath;
309
324
_override->getLoadFilename (filePath, ctx, _hierarchyLevel);
310
325
io::IReadFile* file = m_fileSystem->createAndOpenFile (filePath.c_str ());
311
326
312
- SAssetBundle asset = getAssetInHierarchy (file, _filePath, _params, _hierarchyLevel, _override);
327
+ SAssetBundle asset = getAssetInHierarchy_impl<RestoreWholeBundle> (file, _filePath, _params, _hierarchyLevel, _override);
313
328
314
329
if (file)
315
330
file->drop ();
@@ -318,15 +333,52 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
318
333
}
319
334
320
335
// TODO change name
321
- SAssetBundle getAssetInHierarchy (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
336
+ template <bool RestoreWholeBundle>
337
+ SAssetBundle getAssetInHierarchy_impl (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
322
338
{
323
- return getAssetInHierarchy (_file, _supposedFilename, _params, _hierarchyLevel, &m_defaultLoaderOverride);
339
+ return getAssetInHierarchy_impl<RestoreWholeBundle> (_file, _supposedFilename, _params, _hierarchyLevel, &m_defaultLoaderOverride);
324
340
}
325
341
326
342
// TODO change name
343
+ template <bool RestoreWholeBundle>
344
+ SAssetBundle getAssetInHierarchy_impl (const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
345
+ {
346
+ return getAssetInHierarchy_impl<RestoreWholeBundle>(_filename, _params, _hierarchyLevel, &m_defaultLoaderOverride);
347
+ }
348
+
349
+
350
+ SAssetBundle getAssetInHierarchy (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
351
+ {
352
+ return getAssetInHierarchy_impl<false >(_file, _supposedFilename, _params, _hierarchyLevel, _override);
353
+ }
354
+ SAssetBundle getAssetInHierarchy (const std::string& _filePath, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
355
+ {
356
+ return getAssetInHierarchy_impl<false >(_filePath, _params, _hierarchyLevel, _override);
357
+ }
358
+ SAssetBundle getAssetInHierarchy (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
359
+ {
360
+ return getAssetInHierarchy_impl<false >(_file, _supposedFilename, _params, _hierarchyLevel);
361
+ }
327
362
SAssetBundle getAssetInHierarchy (const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
328
363
{
329
- return getAssetInHierarchy (_filename, _params, _hierarchyLevel, &m_defaultLoaderOverride);
364
+ return getAssetInHierarchy_impl<false >(_filename, _params, _hierarchyLevel);
365
+ }
366
+
367
+ SAssetBundle getAssetInHierarchyWholeBundleRestore (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
368
+ {
369
+ return getAssetInHierarchy_impl<true >(_file, _supposedFilename, _params, _hierarchyLevel, _override);
370
+ }
371
+ SAssetBundle getAssetInHierarchyWholeBundleRestore (const std::string& _filePath, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
372
+ {
373
+ return getAssetInHierarchy_impl<true >(_filePath, _params, _hierarchyLevel, _override);
374
+ }
375
+ SAssetBundle getAssetInHierarchyWholeBundleRestore (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
376
+ {
377
+ return getAssetInHierarchy_impl<true >(_file, _supposedFilename, _params, _hierarchyLevel);
378
+ }
379
+ SAssetBundle getAssetInHierarchyWholeBundleRestore (const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
380
+ {
381
+ return getAssetInHierarchy_impl<true >(_filename, _params, _hierarchyLevel);
330
382
}
331
383
332
384
public:
@@ -342,19 +394,37 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
342
394
{
343
395
return getAssetInHierarchy (_file, _supposedFilename, _params, 0u , _override);
344
396
}
345
-
346
397
// TODO change name
347
398
SAssetBundle getAsset (const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params)
348
399
{
349
400
return getAsset (_filename, _params, &m_defaultLoaderOverride);
350
401
}
351
-
352
402
// TODO change name
353
403
SAssetBundle getAsset (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params)
354
404
{
355
405
return getAsset (_file, _supposedFilename, _params, &m_defaultLoaderOverride);
356
406
}
357
407
408
+ SAssetBundle getAssetWholeBundleRestore (const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, IAssetLoader::IAssetLoaderOverride* _override)
409
+ {
410
+ return getAssetInHierarchyWholeBundleRestore (_filename, _params, 0u , _override);
411
+ }
412
+ // TODO change name
413
+ SAssetBundle getAssetWholeBundleRestore (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, IAssetLoader::IAssetLoaderOverride* _override)
414
+ {
415
+ return getAssetInHierarchyWholeBundleRestore (_file, _supposedFilename, _params, 0u , _override);
416
+ }
417
+ // TODO change name
418
+ SAssetBundle getAssetWholeBundleRestore (const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params)
419
+ {
420
+ return getAssetWholeBundleRestore (_filename, _params, &m_defaultLoaderOverride);
421
+ }
422
+ // TODO change name
423
+ SAssetBundle getAssetWholeBundleRestore (io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params)
424
+ {
425
+ return getAssetWholeBundleRestore (_file, _supposedFilename, _params, &m_defaultLoaderOverride);
426
+ }
427
+
358
428
// TODO change name
359
429
// ! Check whether Assets exist in cache using a key and optionally their types
360
430
/*
0 commit comments