diff --git a/src/asset/asset.h b/src/asset/asset.h new file mode 100644 index 0000000..f529c6f --- /dev/null +++ b/src/asset/asset.h @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2025 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#pragma once +#include "assetpaletteimage.h" +#include "util/reflist.h" + +#define ASSET_HEADER_SIZE 3 +#define ASSET_REFERENCE_COUNT_MAX 8 + +typedef enum { + ASSET_STATE_NOT_LOADED, + ASSET_STATE_LOADING, + ASSET_STATE_LOADED, + ASSET_STATE_ERROR, +} assetstate_t; + +typedef enum { + ASSET_TYPE_UNKNOWN, + ASSET_TYPE_PALETTE_IMAGE, +} assettype_t; + +typedef struct { + const char_t filename[FILENAME_MAX]; + ref_t refListArray[ASSET_REFERENCE_COUNT_MAX]; + reflist_t refList; + assetstate_t state; + assettype_t type; + void *data; +} asset_t; \ No newline at end of file diff --git a/src/asset/assetmanager.h b/src/asset/assetmanager.h index a1cbc34..cb527ec 100644 --- a/src/asset/assetmanager.h +++ b/src/asset/assetmanager.h @@ -9,6 +9,9 @@ #include "error/error.h" #include #include "display/texture/texture.h" +#include "asset.h" + +#define ASSET_MANAGER_ASSET_COUNT_MAX 256 #if ASSET_TYPE == wad #else @@ -31,6 +34,8 @@ static const char_t ASSET_MANAGER_SEARCH_PATHS[][FILENAME_MAX] = { typedef struct { int32_t nothing; zip_t *zip; + asset_t assets[ASSET_MANAGER_ASSET_COUNT_MAX]; + uint8_t assetCount; } assetmanager_t; extern assetmanager_t ASSET_MANAGER; @@ -40,6 +45,24 @@ extern assetmanager_t ASSET_MANAGER; */ errorret_t assetManagerInit(void); +/** + * Gets and requests a lock on a given asset. Locking an asset will prevent it + * from being unloaded until it is unlocked. + * + * @param filename The filename of the asset to lock. + * @param outRef A pointer to store the locked reference ID in. + * @return A pointer to the locked asset, or NULL if the asset could not be + */ +asset_t * assetManagerLock(const char_t *filename, ref_t *outRef); + +/** + * Unlocks a previously locked asset reference. + * + * @param asset The asset to unlock the reference from. + * @param ref The reference ID to unlock. + */ +void assetManagerUnlock(const ref_t ref); + /** * Disposes/cleans up the asset system. */ diff --git a/src/asset/assetpaletteimage.h b/src/asset/assetpaletteimage.h new file mode 100644 index 0000000..208bea1 --- /dev/null +++ b/src/asset/assetpaletteimage.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#pragma once +#include "dusk.h" + +#define ASSET_PALETTE_IMAGE_SIZE_MAX (256*256) + +typedef struct { + uint32_t width; + uint32_t height; + uint8_t data[ASSET_PALETTE_IMAGE_SIZE_MAX]; +} assetpaletteimage_t; \ No newline at end of file