diff options
| author | KonAki <konaki@anokonaki.org> | 2026-10-11 16:44:17 +0800 |
|---|---|---|
| committer | KonAki <konaki@anokonaki.org> | 2026-10-11 16:44:17 +0800 |
| commit | e3f48813fc53057ebd04084b2f71b526c6df80d3 (patch) | |
| tree | 660891f040be1dea5d2eb04e082b82e74658379c /kon/konassets.c | |
| parent | e7ab646556188582af37b3064bb765daef3c9aa9 (diff) | |
assets: queue an array of names, unload one from a group
Diffstat (limited to 'kon/konassets.c')
| -rw-r--r-- | kon/konassets.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/kon/konassets.c b/kon/konassets.c index b55a25a..026f052 100644 --- a/kon/konassets.c +++ b/kon/konassets.c @@ -657,6 +657,16 @@ int kon_assetGroupQueue(kon_assetGroup_t *group, const char *name) { return 1; } +int kon_assetGroupQueueArray(kon_assetGroup_t *group, const char *const *names, int count) { + int i; + + if (!group || !names) return -1; + for (i = 0; count < 0 ? names[i] != NULL : i < count; i++) { + if (!kon_assetGroupQueue(group, names[i])) return -1; + } + return i; +} + int kon_assetGroupQueueList(kon_assetGroup_t *group, const char *listName) { kon_blob_t *blob; char *line; @@ -731,6 +741,24 @@ void kon_assetGroupProgress(const kon_assetGroup_t *group, int *loaded, int *tot if (total) *total = group ? group->count : 0; } +int kon_assetGroupUnload(kon_assetGroup_t *group, const char *name) { + int i, freed = 0; + + if (!group || !name) return 0; + for (i = 0; i < group->count; i++) { + if (strcmp(group->names[i], name) == 0) break; + } + if (i == group->count) return 0; + + if (group->state[i] == 1) freed = kon_assetUnload(group->assets, name); + free(group->names[i]); + memmove(&group->names[i], &group->names[i + 1], (size_t)(group->count - i - 1) * sizeof *group->names); + memmove(&group->state[i], &group->state[i + 1], (size_t)(group->count - i - 1)); + group->count--; + if (i < group->next) group->next--; + return freed; +} + void kon_assetGroupFree(kon_assetGroup_t *group) { int i; |
