X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=addon.h;fp=addon.h;h=d28db0c1d4ca647fd11fbf753e91aaf5673414d2;hb=badfa88dd109bbae5628f58504402f4707569f73;hp=0000000000000000000000000000000000000000;hpb=b8ff92a2caafa557608b84f4a037a5b3ce2628f7;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/addon.h b/addon.h new file mode 100644 index 0000000..d28db0c --- /dev/null +++ b/addon.h @@ -0,0 +1,49 @@ +#ifndef ADDON_H +#define ADDON_H + +#include "workshop.h" +#include "workshop_types.h" +#define ADDON_MOUNTED_MAX 128 +#define ADDON_FOLDERNAME_MAX 64 + +typedef struct addon_reg addon_reg; +struct { + struct addon_reg{ + PublishedFileId_t workshop_id; + + enum workshop_file_type type; + u8 metadata[512]; /* vg_msg buffer */ + u32 metadata_len; + + char foldername[ ADDON_FOLDERNAME_MAX ]; + u32 foldername_hash; + void *userdata; + + enum addon_state{ + k_addon_state_none, + k_addon_state_indexed, + k_addon_state_indexed_absent /* gone but not forgotten */ + } + state; + } + *registry; + u32 registry_count; + + /* deffered: updates in main thread */ + u32 registry_type_counts[k_workshop_file_type_max]; +} +static addon_system; + +static void addon_system_init( void ); +static u32 addon_count( enum workshop_file_type type ); +static addon_reg *get_addon_from_index(enum workshop_file_type type, u32 index); +static u32 get_index_from_addon( enum workshop_file_type type, addon_reg *a ); + +/* scanning routines */ +VG_STATIC void addon_mount_local_folder( enum workshop_file_type type, + const char *base_folder, + const char *content_ext ); +VG_STATIC void addon_mount_workshop_items(void); +VG_STATIC void async_addon_reg_update( void *data, u32 size ); + +#endif /* ADDON_H */