#include "engineAssets.h" #include #include #define ASSET_CACHE_CAPACITY 64 #define ASSET_PATH_MAX 128 typedef struct { char path[ASSET_PATH_MAX]; Texture2D texture; } CachedTexture; typedef struct { char path[ASSET_PATH_MAX]; Sound sound; } CachedSound; static CachedTexture textureCache[ASSET_CACHE_CAPACITY]; static int textureCacheCount = 0; static CachedSound soundCache[ASSET_CACHE_CAPACITY]; static int soundCacheCount = 0; Texture2D LoadTextureCached(const char *path) { for (int i = 0; i < textureCacheCount; i++) { if (strcmp(textureCache[i].path, path) == 0) { return textureCache[i].texture; } } Texture2D texture = LoadTexture(path); if (textureCacheCount >= ASSET_CACHE_CAPACITY) { TraceLog(LOG_WARNING, "ASSETS: Texture cache full, not caching %s", path); return texture; } CachedTexture *entry = &textureCache[textureCacheCount++]; strncpy(entry->path, path, ASSET_PATH_MAX - 1); entry->path[ASSET_PATH_MAX - 1] = '\0'; entry->texture = texture; return texture; } Sound LoadSoundCached(const char *path) { for (int i = 0; i < soundCacheCount; i++) { if (strcmp(soundCache[i].path, path) == 0) { return soundCache[i].sound; } } Sound sound = LoadSound(path); if (soundCacheCount >= ASSET_CACHE_CAPACITY) { TraceLog(LOG_WARNING, "ASSETS: Sound cache full, not caching %s", path); return sound; } CachedSound *entry = &soundCache[soundCacheCount++]; strncpy(entry->path, path, ASSET_PATH_MAX - 1); entry->path[ASSET_PATH_MAX - 1] = '\0'; entry->sound = sound; return sound; } void UnloadCachedAssets(void) { for (int i = 0; i < textureCacheCount; i++) { UnloadTexture(textureCache[i].texture); } textureCacheCount = 0; for (int i = 0; i < soundCacheCount; i++) { UnloadSound(soundCache[i].sound); } soundCacheCount = 0; }