48 #ifndef __CU_ASSET_MANAGER_H__
49 #define __CU_ASSET_MANAGER_H__
50 #include <cugl/util/CUThreadPool.h>
51 #include <cugl/util/CUDebug.h>
52 #include <cugl/assets/CULoader.h>
89 std::unordered_map<size_t,std::shared_ptr<BaseLoader>>
_handlers;
118 bool readCategory(
size_t hash,
const std::shared_ptr<JsonValue>& json);
153 void readCategory(
size_t hash,
const std::shared_ptr<JsonValue>& json,
157 #pragma mark Constructors
212 bool init(
unsigned int threads);
215 #pragma mark Static Constructors
228 static std::shared_ptr<AssetManager>
alloc() {
229 std::shared_ptr<AssetManager> result = std::make_shared<AssetManager>();
230 return (result->init() ? result :
nullptr);
248 static std::shared_ptr<AssetManager>
alloc(
unsigned int threads) {
249 std::shared_ptr<AssetManager> result = std::make_shared<AssetManager>();
250 return (result->init(threads) ? result :
nullptr);
254 #pragma mark Loader Management
268 bool attach(
const std::shared_ptr<BaseLoader>& loader) {
269 size_t hash =
typeid(
T).hash_code();
270 auto it = _handlers.find(hash);
271 if (it != _handlers.end()) {
275 loader->setThreadPool(_workers);
276 _handlers[hash] = loader;
289 size_t hash =
typeid(
T).hash_code();
290 return _handlers.find(hash) != _handlers.end();
304 size_t hash =
typeid(
T).hash_code();
305 auto it = _handlers.find(hash);
306 if (it == _handlers.end()) {
309 it->second->setThreadPool(
nullptr);
310 it->second =
nullptr;
311 _handlers.erase(hash);
322 for(
auto it = _handlers.begin(); it != _handlers.end(); ++it) {
323 it->second =
nullptr;
337 size_t hash =
typeid(
T).hash_code();
338 auto it = _handlers.find(hash);
339 if (it == _handlers.end()) {
340 CUAssertLog(
false,
"No loader assigned for given type");
344 return std::dynamic_pointer_cast<
Loader<T>>(it->second);
348 #pragma mark Progress Monitoring
402 return (size == 0 ? 0.0f : ((
float)
loadCount())/size);
407 #pragma mark Loading/Unloading
420 std::shared_ptr<T>
get(
const std::string& key)
const {
421 size_t hash =
typeid(
T).hash_code();
422 auto it = _handlers.find(hash);
423 if (it == _handlers.end()) {
424 CUAssertLog(
false,
"No loader assigned for given type");
428 std::shared_ptr<Loader<T>> loader = std::dynamic_pointer_cast<
Loader<T>>(it->second);
429 return loader->
get(key);
444 std::shared_ptr<T>
get(
const char* key)
const {
445 return get<T>(std::string(key));
468 bool load(
const std::string& key,
const std::string& source) {
469 size_t hash =
typeid(
T).hash_code();
470 auto it = _handlers.find(hash);
471 if (it != _handlers.end()) {
472 std::shared_ptr<Loader<T>> loader = std::dynamic_pointer_cast<
Loader<T>>(it->second);
473 return loader->
load(key,source);
476 CUAssertLog(
false,
"No loader assigned for given type");
500 bool load(
const char* key,
const std::string& source) {
501 return load<T>(std::string(key),source);
524 bool load(
const std::string& key,
const char* source) {
525 return load<T>(key,std::string(source));
548 bool load(
const char* key,
const char* source) {
549 return load<T>(std::string(key),std::string(source));
578 size_t hash =
typeid(
T).hash_code();
579 auto it = _handlers.find(hash);
580 if (it != _handlers.end()) {
581 it->second->loadAsync(key,source,callback);
585 CUAssertLog(
false,
"No loader assigned for given type");
614 loadAsync<T>(std::string(key),source,callback);
643 loadAsync<T>(key,std::string(source),callback);
672 loadAsync<T>(std::string(key),std::string(source),callback);
691 size_t hash =
typeid(
T).hash_code();
692 auto it = _handlers.find(hash);
693 if (it != _handlers.end()) {
694 it->second->unload(key);
698 CUAssertLog(
false,
"No loader assigned for given type");
717 unload<T>(std::string(key));
729 for(
auto it = _handlers.begin(); it != _handlers.end(); ++it) {
730 it->second->unloadAll();
735 #pragma mark Directory Support
void loadAsync(const std::string &key, const char *source, LoaderCallback callback)
Definition: CUAssetManager.h:642
AssetManager()
Definition: CUAssetManager.h:165
bool init()
Definition: CUAssetManager.h:193
void unload(const char *key)
Definition: CUAssetManager.h:716
~AssetManager()
Definition: CUAssetManager.h:170
void loadDirectoryAsync(const std::shared_ptr< JsonValue > &json, LoaderCallback callback)
bool _preload
Definition: CUAssetManager.h:94
void loadDirectoryAsync(const char *directory, LoaderCallback callback)
Definition: CUAssetManager.h:919
std::function< void(const std::string &key, bool success)> LoaderCallback
Definition: CULoader.h:81
bool detach()
Definition: CUAssetManager.h:303
float progress() const
Definition: CUAssetManager.h:400
bool load(const std::string &key, const std::string &source)
Definition: CUAssetManager.h:468
bool load(const char *key, const std::string &source)
Definition: CUAssetManager.h:500
void loadAsync(const std::string &key, const std::string &source, LoaderCallback callback)
Definition: CUAssetManager.h:577
bool attach(const std::shared_ptr< BaseLoader > &loader)
Definition: CUAssetManager.h:268
static std::shared_ptr< AssetManager > alloc(unsigned int threads)
Definition: CUAssetManager.h:248
bool load(const std::string &key, const char *source)
Definition: CUAssetManager.h:524
void unload(const std::string &key)
Definition: CUAssetManager.h:690
bool complete() const
Definition: CUAssetManager.h:385
void unloadAll()
Definition: CUAssetManager.h:728
bool loadDirectory(const char *directory)
Definition: CUAssetManager.h:815
void loadAsync(const char *key, const char *source, LoaderCallback callback)
Definition: CUAssetManager.h:671
void loadAsync(const char *key, const std::string &source, LoaderCallback callback)
Definition: CUAssetManager.h:613
std::unordered_map< size_t, std::shared_ptr< BaseLoader > > _handlers
Definition: CUAssetManager.h:89
bool load(const std::string &key, const std::string &source)
Definition: CULoader.h:316
bool load(const char *key, const char *source)
Definition: CUAssetManager.h:548
Definition: CULoader.h:675
bool loadDirectory(const std::shared_ptr< JsonValue > &json)
bool isAttached()
Definition: CUAssetManager.h:288
Definition: CUAssetManager.h:82
Definition: CUAnimationNode.h:52
std::shared_ptr< ThreadPool > _workers
Definition: CUAssetManager.h:91
std::shared_ptr< Loader< T > > access()
Definition: CUAssetManager.h:336
bool readCategory(size_t hash, const std::shared_ptr< JsonValue > &json)
static std::shared_ptr< AssetManager > alloc()
Definition: CUAssetManager.h:228
void detachAll()
Definition: CUAssetManager.h:321
std::shared_ptr< T > get(const std::string &key) const
Definition: CULoader.h:743