#ifndef ADDON_H
#define ADDON_H
-#include "common.h"
+#include "skaterift.h"
#include "vg/vg_steam_ugc.h"
#include "workshop_types.h"
#include "vg/vg_mem_pool.h"
#define CACHE_PLAYER_MAX 10
typedef struct addon_reg addon_reg;
+typedef struct addon_cache_entry addon_cache_entry;
struct {
struct addon_reg{
PublishedFileId_t workshop_id;
char foldername[ ADDON_FOLDERNAME_MAX ];
u32 foldername_hash;
- void *userdata;
+ u16 cache_id;
enum addon_state{
k_addon_state_none,
u32 registry_count;
/* deffered: updates in main thread */
- u32 registry_type_counts[k_workshop_file_type_max];
+ u32 registry_type_counts[k_workshop_file_type_max];
+
+ struct addon_cache{
+ struct addon_cache_entry{
+ u32 reg_index;
+ addon_reg *reg_ptr; /* TODO: only use reg_index? */
+
+ vg_pool_node poolnode;
+
+ enum addon_cache_state{
+ k_addon_cache_state_none,
+ k_addon_cache_state_loaded,
+ k_addon_cache_state_load_request
+ }
+ state;
+ }
+ *allocs;
+ vg_pool pool;
+
+ void *items; /* the real data */
+ size_t stride;
+ }
+ cache[k_workshop_file_type_max];
+ SDL_SpinLock sl_cache_using_resources;
+
+
+
+#if 0
+
+
/* caches */
struct cache_board{
- enum cache_board_state{
- k_cache_board_state_none,
- k_cache_board_state_loaded,
- k_cache_board_state_load_request
- }
- state;
struct player_board board;
+
u32 reg_index;
addon_reg *reg_ptr;
-
vg_pool_node cachenode;
}
*boards;
vg_pool board_cache;
struct cache_playermodel{
- enum cache_board_state state;
struct player_model model;
+
u32 reg_index;
addon_reg *reg_ptr;
vg_pool_node cachenode;
}
*playermodels;
vg_pool playermodel_cache;
+#endif
- SDL_SpinLock sl_cache;
}
static addon_system;
VG_STATIC addon_reg *addon_mount_local_addon( const char *folder,
enum workshop_file_type type,
const char *content_ext );
+static u16 addon_cache_fetch( enum workshop_file_type type, u32 reg_index );
+static u16 addon_cache_alloc( enum workshop_file_type type, u32 reg_index );
+static void *addon_cache_item( enum workshop_file_type type, u16 id );
+static void *addon_cache_item_if_loaded( enum workshop_file_type type, u16 id );
#endif /* ADDON_H */