79 lines
1.8 KiB
C
79 lines
1.8 KiB
C
/**
|
|
* Copyright (c) 2025 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include "asset.h"
|
|
|
|
#define ASSET_MANAGER_ASSET_COUNT_MAX 32
|
|
|
|
#if ASSET_TYPE == wad
|
|
#else
|
|
#error "Unsupported ASSET_TYPE"
|
|
#endif
|
|
|
|
static const char_t ASSET_MANAGER_SEARCH_PATHS[][FILENAME_MAX] = {
|
|
"%s/%s",
|
|
"%s",
|
|
"../%s",
|
|
"../../%s",
|
|
"data/%s",
|
|
"../data/%s",
|
|
};
|
|
|
|
#define ASSET_MANAGER_SEARCH_PATHS_COUNT (\
|
|
sizeof(ASSET_MANAGER_SEARCH_PATHS) / FILENAME_MAX\
|
|
)
|
|
|
|
typedef struct {
|
|
zip_t *zip;
|
|
asset_t assets[ASSET_MANAGER_ASSET_COUNT_MAX];
|
|
char_t systemPath[FILENAME_MAX];
|
|
uint8_t assetCount;
|
|
} assetmanager_t;
|
|
|
|
extern assetmanager_t ASSET_MANAGER;
|
|
|
|
/**
|
|
* Initializes the asset system.
|
|
*/
|
|
errorret_t assetManagerInit(void);
|
|
|
|
/**
|
|
* Update the asset manager. This should be called once per frame.
|
|
*/
|
|
void assetManagerUpdate(void);
|
|
|
|
/**
|
|
* Get an asset by filename. This will return NULL if the asset does not exist.
|
|
* This will not lock the asset, you must do that separately. If you do not
|
|
* lock the asset there is no guarantee the asset pointer will remain valid.
|
|
*
|
|
* @param filename The filename of the asset to get.
|
|
* @param outAsset The output asset pointer.
|
|
* @return An error code.
|
|
*/
|
|
errorret_t assetManagerGetAsset(const char_t *filename, asset_t **outAsset);
|
|
|
|
/**
|
|
* Gets, locks and loads an asset. This is all blocking so only use if you
|
|
* really need to.
|
|
*
|
|
* @param filename The filename of the asset to get.
|
|
* @param outAsset The output asset pointer.
|
|
* @param outRef The output asset reference pointer.
|
|
* @return An error code if something goes wrong.
|
|
*/
|
|
errorret_t assetManagerLoadAsset(
|
|
const char_t *filename,
|
|
asset_t **outAsset,
|
|
ref_t *outRef
|
|
);
|
|
|
|
/**
|
|
* Disposes/cleans up the asset system.
|
|
*/
|
|
void assetManagerDispose(void); |