refactor(1)
[carveJwlIkooP6JGAAIwe30JlM.git] / save.c
1 #ifndef SAVE_C
2 #define SAVE_C
3
4 #include "save.h"
5 #include "vg/vg_msg.h"
6
7 struct {
8 u8 buf[1024];
9 u32 len;
10 }
11 static savedata;
12
13 static void skaterift_write_savedata_thread(void *_){
14 FILE *fp = fopen( "save.bkv", "wb" );
15 if( fp ){
16 fwrite( savedata.buf, savedata.len, 1, fp );
17 fclose( fp );
18 }
19 skaterift_end_op();
20 }
21
22 static void skaterift_write_savedata(void){
23 if( skaterift.async_op != k_async_op_none ) return;
24
25 skaterift_begin_op( k_async_op_write_savedata );
26
27 vg_msg sav = {0};
28 sav.buf = savedata.buf;
29 sav.max = sizeof(savedata.buf);
30
31 vg_msg_frame( &sav, "player" );
32
33 struct addon_cache *cache = &addon_system.cache[k_workshop_file_type_board];
34
35 if( localplayer.board_view_slot ){
36 addon_cache_entry *entry = vg_pool_item( &cache->pool,
37 localplayer.board_view_slot );
38
39 if( entry->reg_ptr ){
40 if( entry->reg_ptr->workshop_id )
41 vg_msg_wkvu64( &sav, "board", entry->reg_ptr->workshop_id );
42 else
43 vg_msg_wkvstr( &sav, "board", entry->reg_ptr->foldername );
44 }
45 }
46
47 vg_msg_end_frame( &sav );
48 savedata.len = sav.len;
49 vg_loader_start( skaterift_write_savedata_thread, NULL );
50 }
51
52 static void skaterift_read_savedata(void){
53 FILE *fp = fopen( "save.bkv", "rb" );
54 if( fp ){
55 savedata.len = fread( savedata.buf, 1, sizeof(savedata.buf), fp );
56 fclose( fp );
57 }
58 }
59
60 #endif /* SAVE_C */