From 4b8fc63f926737ca0593a4e471550f9f4995c538 Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 23 Jul 2023 00:07:28 +0100 Subject: [PATCH] review save method --- ent_skateshop.c | 2 +- save.c | 69 +++++++++++++++++++++++++++++-------------------- save.h | 10 +++++++ skaterift.c | 20 +++++++------- 4 files changed, 63 insertions(+), 38 deletions(-) diff --git a/ent_skateshop.c b/ent_skateshop.c index 7dd11c0..44a669a 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -252,7 +252,7 @@ VG_STATIC void global_skateshop_preupdate(void){ localplayer.board_view_slot = cache_id; global_skateshop_exit(); - skaterift_write_savedata(); + skaterift_write_main_savedata(); return; } } diff --git a/save.c b/save.c index 93169db..e31816e 100644 --- a/save.c +++ b/save.c @@ -4,18 +4,28 @@ #include "save.h" #include "vg/vg_msg.h" -struct { - u8 buf[1024]; - u32 len; +static void savedata_write_thread( void *file ){ + struct savedata *sav = file; + FILE *fp = fopen( sav->path, "wb" ); + if( fp ){ + fwrite( sav->buf, sav->len, 1, fp ); + fclose( fp ); + } + else { + vg_error( "Error writing savedata (%s)\n", sav->path ); + } } -static savedata; -static void skaterift_write_savedata_thread(void *_){ - FILE *fp = fopen( "save.bkv", "wb" ); +static void savedata_read( struct savedata *sav ){ + FILE *fp = fopen( sav->path, "rb" ); if( fp ){ - fwrite( savedata.buf, savedata.len, 1, fp ); + sav->len = fread( sav->buf, 1, sizeof(sav->buf), fp ); fclose( fp ); } + else{ + sav->len = 0; + vg_error( "Error reading savedata (%s)\n", sav->path ); + } } static void skaterift_write_addon_alias( vg_msg *msg, const char *key, @@ -55,44 +65,47 @@ static void skaterift_read_addon_alias( vg_msg *msg, const char *key, alias->workshop_id = vg_msg_read_as_u64( &kv ); } -static void skaterift_write_savedata(void){ +static void skaterift_write_main_savedata(void){ if( !vg_loader_availible() ) return; - vg_msg sav = {0}; - sav.buf = savedata.buf; - sav.max = sizeof(savedata.buf); + vg_linear_clear( vg_async.buffer ); + struct savedata *sav = vg_linear_alloc( vg_async.buffer, + vg_align8(sizeof(struct savedata)) ); - vg_msg_frame( &sav, "player" ); + strcpy( sav->path, "save.bkv" ); + + vg_msg kvsav = {0}; + kvsav.buf = sav->buf; + kvsav.max = sizeof(sav->buf); + + vg_msg_frame( &kvsav, "player" ); { - skaterift_write_viewslot( &sav, "board", k_addon_type_board, + skaterift_write_viewslot( &kvsav, "board", k_addon_type_board, localplayer.board_view_slot ); - skaterift_write_viewslot( &sav, "playermodel", k_addon_type_player, + skaterift_write_viewslot( &kvsav, "playermodel", k_addon_type_player, localplayer.playermodel_view_slot ); } - vg_msg_end_frame( &sav ); + vg_msg_end_frame( &kvsav ); - vg_msg_frame( &sav, "world" ); + vg_msg_frame( &kvsav, "world" ); { addon_reg *reg = world_static.addon_client; if( reg && (world_static.active_instance > 0) ){ - skaterift_write_addon_alias( &sav, "alias", ®->alias ); - vg_msg_wkvu32( &sav, "index", world_static.active_instance ); - vg_msg_wkvnum( &sav, "position", k_vg_msg_float|k_vg_msg_32b, 3, + skaterift_write_addon_alias( &kvsav, "alias", ®->alias ); + vg_msg_wkvu32( &kvsav, "index", world_static.active_instance ); + vg_msg_wkvnum( &kvsav, "position", k_vg_msg_float|k_vg_msg_32b, 3, localplayer.rb.co ); } } - vg_msg_end_frame( &sav ); + vg_msg_end_frame( &kvsav ); - savedata.len = sav.len; - vg_loader_start( skaterift_write_savedata_thread, NULL ); + sav->len = kvsav.len; + vg_loader_start( savedata_write_thread, sav ); } -static void skaterift_read_savedata(void){ - FILE *fp = fopen( "save.bkv", "rb" ); - if( fp ){ - savedata.len = fread( savedata.buf, 1, sizeof(savedata.buf), fp ); - fclose( fp ); - } +static void skaterift_read_main_savedata( struct savedata *sav ){ + strcpy( sav->path, "save.bkv" ); + savedata_read( sav ); } #endif /* SAVE_C */ diff --git a/save.h b/save.h index bffbcd5..7ed944c 100644 --- a/save.h +++ b/save.h @@ -1,9 +1,19 @@ #ifndef SAVE_H #define SAVE_H +#include "vg/vg_stdint.h" + +struct savedata { + char path[128]; + u8 buf[1024]; + u32 len; +}; + #include "ent_skateshop.h" static void skaterift_write_savedata(void); static void skaterift_read_savedata(void); +static void skaterift_read_main_savedata( struct savedata *sav ); +static void skaterift_write_main_savedata(void); #endif /* SAVE_H */ diff --git a/skaterift.c b/skaterift.c index 25a89e6..25957d5 100644 --- a/skaterift.c +++ b/skaterift.c @@ -63,7 +63,7 @@ int main( int argc, char *argv[] ){ VG_STATIC void vg_launch_opt(void){} VG_STATIC void vg_preload(void){ - skaterift_read_savedata(); + //skaterift_read_savedata(); vg_info(" Copyright . . . -----, ,----- ,---. .---. \n" ); vg_info(" 2021-2023 |\\ /| | / | | | | /| \n" ); @@ -95,12 +95,14 @@ static void async_call_ready( void *payload, u32 size ){ } static void skaterift_restore_state(void){ - vg_msg sav = {0}; - sav.buf = savedata.buf; - sav.len = savedata.len; - sav.max = sizeof(savedata.buf); - - vg_msg player = sav; + struct savedata sav; + skaterift_read_main_savedata( &sav ); + vg_msg kvsav = {0}; + kvsav.buf = sav.buf; + kvsav.len = sav.len; + kvsav.max = sizeof(sav.buf); + + vg_msg player = kvsav; if( vg_msg_seekframe( &player, "player", 0 ) ){ addon_alias q; @@ -122,7 +124,7 @@ static void skaterift_restore_state(void){ addon_cache_create_viewer( k_addon_type_player, reg_id ); } - vg_msg world = sav; + vg_msg world = kvsav; if( vg_msg_seekframe( &world, "world", 0 ) ){ addon_alias q; @@ -248,7 +250,7 @@ VG_STATIC void vg_load(void){ /* and now */ skaterift_restore_state(); - vg_loader_step( NULL, skaterift_write_savedata ); + vg_loader_step( NULL, skaterift_write_main_savedata ); board_processview_thread(NULL); vg_async_call( async_call_ready, NULL, 0 ); -- 2.25.1