5 #include "vg/vg_steam_ugc.h"
6 #include "workshop_types.h"
7 #include "vg/vg_mem_pool.h"
12 #define ADDON_FOLDERNAME_MAX 64
14 /* total count that we have knowledge of */
15 #define ADDON_MOUNTED_MAX 128
17 /* in memory and loaded stuffs */
18 #define CACHE_BOARD_MAX 10
19 #define CACHE_PLAYER_MAX 10
21 typedef struct addon_reg addon_reg
;
22 typedef struct addon_cache_entry addon_cache_entry
;
25 PublishedFileId_t workshop_id
;
27 enum workshop_file_type type
;
28 u8 metadata
[512]; /* vg_msg buffer */
31 char foldername
[ ADDON_FOLDERNAME_MAX
];
37 k_addon_state_indexed
,
38 k_addon_state_indexed_absent
/* gone but not forgotten */
45 /* deffered: updates in main thread */
46 u32 registry_type_counts
[k_workshop_file_type_max
];
49 struct addon_cache_entry
{
51 addon_reg
*reg_ptr
; /* TODO: only use reg_index? */
53 vg_pool_node poolnode
;
55 enum addon_cache_state
{
56 k_addon_cache_state_none
,
57 k_addon_cache_state_loaded
,
58 k_addon_cache_state_load_request
65 void *items
; /* the real data */
68 cache
[k_workshop_file_type_max
];
69 SDL_SpinLock sl_cache_using_resources
;
79 struct player_board board
;
83 vg_pool_node cachenode
;
88 struct cache_playermodel
{
89 struct player_model model
;
93 vg_pool_node cachenode
;
96 vg_pool playermodel_cache
;
102 static void addon_system_init( void );
103 static u32
addon_count( enum workshop_file_type type
);
104 static addon_reg
*get_addon_from_index(enum workshop_file_type type
, u32 index
);
105 static u32
get_index_from_addon( enum workshop_file_type type
, addon_reg
*a
);
106 static int addon_get_content_folder( addon_reg
*reg
, vg_str
*folder
);
108 /* scanning routines */
109 VG_STATIC
void addon_mount_content_folder( enum workshop_file_type type
,
110 const char *base_folder
,
111 const char *content_ext
);
112 VG_STATIC
void addon_mount_workshop_items(void);
113 VG_STATIC
void async_addon_reg_update( void *data
, u32 size
);
114 VG_STATIC addon_reg
*addon_mount_local_addon( const char *folder
,
115 enum workshop_file_type type
,
116 const char *content_ext
);
117 static u16
addon_cache_fetch( enum workshop_file_type type
, u32 reg_index
);
118 static u16
addon_cache_alloc( enum workshop_file_type type
, u32 reg_index
);
119 static void *addon_cache_item( enum workshop_file_type type
, u16 id
);
120 static void *addon_cache_item_if_loaded( enum workshop_file_type type
, u16 id
);