#ifndef SAVE_C
#define SAVE_C
+#include "save.h"
+#include "vg/vg_msg.h"
+
struct {
- u8 buf[ 1024 ];
+ u8 buf[1024];
u32 len;
}
static savedata;
+static void skaterift_write_savedata_thread(void *_){
+ FILE *fp = fopen( "save.bkv", "wb" );
+ if( fp ){
+ fwrite( savedata.buf, savedata.len, 1, fp );
+ fclose( fp );
+ }
+ skaterift_end_op();
+}
+
static void skaterift_write_savedata(void){
+ if( skaterift.async_op != k_async_op_none ) return;
+
+ skaterift_begin_op( k_async_op_write_savedata );
+
vg_msg sav = {0};
sav.buf = savedata.buf;
sav.max = sizeof(savedata.buf);
vg_msg_frame( &sav, "player" );
+ struct addon_cache *cache = &addon_system.cache[k_workshop_file_type_board];
+
if( localplayer.board_view_slot ){
- struct cache_board *cache_ptr = localplayer.board_view_slot;
- if( cache_ptr->reg_ptr ){
- if( cache_ptr->reg_ptr->workshop_id )
- vg_msg_wkvu64( &sav, "board", cache_ptr->reg_ptr->workshop_id );
+ addon_cache_entry *entry = vg_pool_item( &cache->pool,
+ localplayer.board_view_slot );
+
+ if( entry->reg_ptr ){
+ if( entry->reg_ptr->workshop_id )
+ vg_msg_wkvu64( &sav, "board", entry->reg_ptr->workshop_id );
else
- vg_msg_wkvstr( &sav, "board", cache_ptr->reg_ptr->foldername );
+ vg_msg_wkvstr( &sav, "board", entry->reg_ptr->foldername );
}
}
vg_msg_end_frame( &sav );
savedata.len = sav.len;
-
- FILE *fp = fopen( "save.bkv", "wb" );
- if( fp ){
- fwrite( savedata.buf, sav.len, 1, fp );
- fclose( fp );
- }
+ vg_loader_start( skaterift_write_savedata_thread, NULL );
}
static void skaterift_read_savedata(void){