2 #include "vg/vg_steam_ugc.h"
3 #include "vg/vg_mem_pool.h"
4 #include "vg/vg_string.h"
5 #include "addon_types.h"
7 typedef struct addon_reg addon_reg
;
8 typedef struct addon_cache_entry addon_cache_entry
;
9 typedef struct addon_alias addon_alias
;
14 PublishedFileId_t workshop_id
;
15 char foldername
[ ADDON_FOLDERNAME_MAX
];
18 #define ADDON_REG_HIDDEN 0x1
19 #define ADDON_REG_MTZERO 0x2
20 #define ADDON_REG_CITY 0x4
21 #define ADDON_REG_PREMIUM 0x8
29 u8 metadata
[512]; /* vg_msg buffer */
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_addon_type_max
];
50 struct addon_cache_entry
53 addon_reg
*reg_ptr
; /* TODO: only use reg_index? */
55 vg_pool_node poolnode
;
57 enum addon_cache_state
{
58 k_addon_cache_state_none
,
59 k_addon_cache_state_loaded
,
60 k_addon_cache_state_load_request
67 void *items
; /* the real data */
70 cache
[k_addon_type_max
];
71 SDL_SpinLock sl_cache_using_resources
;
75 void addon_system_init( void );
76 u32
addon_count( enum addon_type type
, u32 ignoreflags
);
77 addon_reg
*get_addon_from_index( enum addon_type type
, u32 index
,
79 u32
get_index_from_addon( enum addon_type type
, addon_reg
*a
);
80 int addon_get_content_folder( addon_reg
*reg
, vg_str
*folder
, int async
);
82 /* scanning routines */
83 u32
addon_match( addon_alias
*alias
);
84 int addon_alias_eq( addon_alias
*a
, addon_alias
*b
);
85 void addon_alias_uid( addon_alias
*alias
, char buf
[ADDON_UID_MAX
] );
86 int addon_uid_to_alias( const char *uid
, addon_alias
*alias
);
87 void invalidate_addon_alias( addon_alias
*alias
);
88 void addon_mount_content_folder( enum addon_type type
,
89 const char *base_folder
,
90 const char *content_ext
);
91 void addon_mount_workshop_items(void);
92 void async_addon_reg_update( void *data
, u32 size
);
93 addon_reg
*addon_mount_local_addon( const char *folder
,
95 const char *content_ext
);
96 u16
addon_cache_fetch( enum addon_type type
, u32 reg_index
);
97 u16
addon_cache_alloc( enum addon_type type
, u32 reg_index
);
98 void *addon_cache_item( enum addon_type type
, u16 id
);
99 void *addon_cache_item_if_loaded( enum addon_type type
, u16 id
);
100 void async_addon_setstate( void *data
, u32 size
);
102 void addon_system_pre_update(void);
103 u16
addon_cache_create_viewer( enum addon_type type
, u16 reg_id
);
105 void addon_cache_watch( enum addon_type type
, u16 cache_id
);
106 void addon_cache_unwatch( enum addon_type type
, u16 cache_id
);
107 u16
addon_cache_create_viewer_from_uid( enum addon_type type
,
108 char uid
[ADDON_UID_MAX
] );