summaryrefslogtreecommitdiff
path: root/kon/konassets.c
diff options
context:
space:
mode:
authorKonAki <konaki@anokonaki.org>2026-10-11 16:44:17 +0800
committerKonAki <konaki@anokonaki.org>2026-10-11 16:44:17 +0800
commite3f48813fc53057ebd04084b2f71b526c6df80d3 (patch)
tree660891f040be1dea5d2eb04e082b82e74658379c /kon/konassets.c
parente7ab646556188582af37b3064bb765daef3c9aa9 (diff)
assets: queue an array of names, unload one from a group
Diffstat (limited to 'kon/konassets.c')
-rw-r--r--kon/konassets.c28
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;