X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=save.c;h=73eaa499d6d921f1266ad42adff23710008e3b9b;hb=8d336ea2cde7c596296dbaf0d3ce27a82c6c6cf0;hp=88dfada37adfea272434b22bd19f8e6f5091346d;hpb=b7b22a6b33b7a7e6166b3de1fcabf71eb2aed287;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/save.c b/save.c index 88dfada..73eaa49 100644 --- a/save.c +++ b/save.c @@ -1,13 +1,17 @@ -#ifndef SAVE_C -#define SAVE_C - +#include "skaterift.h" #include "save.h" #include "addon.h" #include "vg/vg_msg.h" #include "vg/vg_log.h" +#include "vg/vg_loader.h" #include "world.h" +#include "player.h" + +static const char *str_skaterift_main_save = "save.bkv"; +static f64 last_autosave; -static void savedata_file_write( savedata_file *file ){ +void savedata_file_write( savedata_file *file ) +{ savedata_file *sav = file; FILE *fp = fopen( sav->path, "wb" ); if( fp ){ @@ -20,13 +24,15 @@ static void savedata_file_write( savedata_file *file ){ } } -static void savedata_group_write( savedata_group *group ){ +void savedata_group_write( savedata_group *group ) +{ for( u32 i=0; ifile_count; i++ ){ savedata_file_write( &group->files[i] ); } } -static void savedata_file_read( savedata_file *file ){ +void savedata_file_read( savedata_file *file ) +{ FILE *fp = fopen( file->path, "rb" ); if( fp ){ file->len = fread( file->buf, 1, sizeof(file->buf), fp ); @@ -41,7 +47,7 @@ static void savedata_file_read( savedata_file *file ){ static void skaterift_write_addon_alias( vg_msg *msg, const char *key, addon_alias *alias ){ if( alias->workshop_id ) - vg_msg_wkvu64( msg, key, alias->workshop_id ); + vg_msg_wkvnum( msg, key, k_vg_msg_u64, 1, &alias->workshop_id ); else vg_msg_wkvstr( msg, key, alias->foldername ); } @@ -58,9 +64,10 @@ static void skaterift_write_viewslot( vg_msg *msg, const char *key, skaterift_write_addon_alias( msg, key, ®->alias ); } -static void skaterift_read_addon_alias( vg_msg *msg, const char *key, - enum addon_type type, - addon_alias *alias ){ +void skaterift_read_addon_alias( vg_msg *msg, const char *key, + enum addon_type type, + addon_alias *alias ) +{ alias->foldername[0] = '\0'; alias->workshop_id = 0; alias->type = type; @@ -107,12 +114,13 @@ static void skaterift_populate_world_savedata( savedata_file *file, file->len = sav.cur.co; } -static void skaterift_populate_main_savedata( savedata_file *file ){ +static void skaterift_populate_main_savedata( savedata_file *file ) +{ strcpy( file->path, str_skaterift_main_save ); vg_msg sav; vg_msg_init( &sav, file->buf, sizeof(file->buf) ); - vg_msg_wkvu32( &sav, "ach", skaterift.achievements ); + vg_msg_wkvnum( &sav, "ach", k_vg_msg_u32, 1, &skaterift.achievements ); vg_msg_frame( &sav, "player" ); { @@ -126,7 +134,14 @@ static void skaterift_populate_main_savedata( savedata_file *file ){ file->len = sav.cur.co; } -static int skaterift_autosave( int async ){ +void skaterift_read_main_savedata( savedata_file *file ) +{ + strcpy( file->path, str_skaterift_main_save ); + savedata_file_read( file ); +} + +int skaterift_autosave( int async ) +{ if( async ) if( !vg_loader_availible() ) return 0; @@ -165,8 +180,16 @@ static int skaterift_autosave( int async ){ return 1; } -static void skaterift_autosave_synchronous(void){ +void skaterift_autosave_synchronous(void) +{ skaterift_autosave(0); } -#endif /* SAVE_C */ +void skaterift_autosave_update(void) +{ + if( vg.time - last_autosave > 20.0 ){ + if( skaterift_autosave(1) ){ + last_autosave = vg.time; + } + } +}