put in its own file
[carveJwlIkooP6JGAAIwe30JlM.git] / addon.h
1 #ifndef ADDON_H
2 #define ADDON_H
3
4 #include "common.h"
5 #include "vg/vg_steam_ugc.h"
6 #include "workshop_types.h"
7 #include "addon_cache.h"
8
9 #include "world.h"
10 #include "player.h"
11
12 #define ADDON_FOLDERNAME_MAX 64
13
14 /* total count that we have knowledge of */
15 #define ADDON_MOUNTED_MAX 128
16
17 /* in memory and loaded stuffs */
18 #define CACHE_BOARD_MAX 10
19 #define CACHE_PLAYER_MAX 10
20
21 typedef struct addon_reg addon_reg;
22 struct {
23 struct addon_reg{
24 PublishedFileId_t workshop_id;
25
26 enum workshop_file_type type;
27 u8 metadata[512]; /* vg_msg buffer */
28 u32 metadata_len;
29
30 char foldername[ ADDON_FOLDERNAME_MAX ];
31 u32 foldername_hash;
32 void *userdata;
33
34 enum addon_state{
35 k_addon_state_none,
36 k_addon_state_indexed,
37 k_addon_state_indexed_absent /* gone but not forgotten */
38 }
39 state;
40 }
41 *registry;
42 u32 registry_count;
43
44 /* deffered: updates in main thread */
45 u32 registry_type_counts[k_workshop_file_type_max];
46
47 /* caches */
48 struct cache_board{
49 enum cache_board_state{
50 k_cache_board_state_none,
51 k_cache_board_state_loaded,
52 k_cache_board_state_load_request
53 }
54 state;
55 struct player_board board;
56 u32 reg_index;
57 addon_reg *reg_ptr;
58
59 addon_cache_node cachenode;
60 }
61 *boards;
62 addon_cache board_cache;
63
64 SDL_SpinLock sl_cache;
65 }
66 static addon_system;
67
68 static void addon_system_init( void );
69 static u32 addon_count( enum workshop_file_type type );
70 static addon_reg *get_addon_from_index(enum workshop_file_type type, u32 index);
71 static u32 get_index_from_addon( enum workshop_file_type type, addon_reg *a );
72 static int addon_get_content_folder( addon_reg *reg, vg_str *folder );
73
74 /* scanning routines */
75 VG_STATIC void addon_mount_content_folder( enum workshop_file_type type,
76 const char *base_folder,
77 const char *content_ext );
78 VG_STATIC void addon_mount_workshop_items(void);
79 VG_STATIC void async_addon_reg_update( void *data, u32 size );
80 VG_STATIC addon_reg *addon_mount_local_addon( const char *folder,
81 enum workshop_file_type type,
82 const char *content_ext );
83
84 #endif /* ADDON_H */