X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skaterift.h;h=a139476f8d3878ed8d5d30bb05c86e2217b0fecc;hb=7b1e8a237acc3121c86fab9b5946da6a8d3bf6c4;hp=ca31f237817bef194a66b383a6266c2840f51858;hpb=342fcbf6fda017bdd38d56ce0fa7c9e59e589f3b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skaterift.h b/skaterift.h index ca31f23..a139476 100644 --- a/skaterift.h +++ b/skaterift.h @@ -3,6 +3,7 @@ #include "common.h" #include "world.h" +#include "addon.h" struct{ enum async_operation{ @@ -11,18 +12,19 @@ struct{ k_async_op_world_preloading, k_async_op_world_loading, k_async_op_world_scan, + k_async_op_world_load_preview, + k_async_op_board_scan, + k_async_op_board_load, k_workshop_form_op_loading_model, k_workshop_form_op_downloading_submission, k_workshop_form_op_publishing_update, - k_workshop_op_item_scan, - k_workshop_op_item_load } async_op; } static skaterift = { .async_op = k_async_op_clientloading }; /* Skaterift api */ -static void skaterift_change_world( const char *world_path ); +static void skaterift_change_world_start( void ); static int skaterift_change_world_command( int argc, const char *argv[] ); /* @@ -31,6 +33,10 @@ static int skaterift_change_world_command( int argc, const char *argv[] ); */ VG_STATIC void skaterift_begin_op( enum async_operation op ) { + if( vg_thread_purpose() == k_thread_purpose_loader ){ + vg_fatal_error( "Can't do that here\n" ); + } + if( skaterift.async_op != k_async_op_none ){ vg_fatal_error( "Async executing op(%d), tried to start op(%d)\n", skaterift.async_op, op ); @@ -53,13 +59,23 @@ VG_STATIC void skaterift_shift_op( enum async_operation op ) vg_info( "Shifting to op( %d )\n", op ); } +VG_STATIC void skaterift_end_op(void); +VG_STATIC void async_skaterift_end_op( void *data, u32 size ){ + skaterift_end_op(); +} + /* * Finished operation, otheres can now run */ VG_STATIC void skaterift_end_op(void) { - vg_info( "Finishing op( %d )\n", skaterift.async_op ); - skaterift.async_op = k_async_op_none; + if( vg_thread_purpose() == k_thread_purpose_loader ){ + vg_async_call( async_skaterift_end_op, NULL, 0 ); + } + else{ + vg_info( "Finishing op( %d )\n", skaterift.async_op ); + skaterift.async_op = k_async_op_none; + } } #endif /* SKATERIFT_H */