X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=save.c;h=ad1b35e0414186b650596a4a094aed3e3b76c67b;hb=cbeec2e44e93ab43ccde54c2dd9cd02f559ebef8;hp=76cfb3cdade24194da2dc6583cd0a50c0745ebb5;hpb=dbdb031ee290892468d24b6dd576fe62c47e778a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/save.c b/save.c index 76cfb3c..ad1b35e 100644 --- a/save.c +++ b/save.c @@ -1,37 +1,52 @@ #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){