#define SKATERIFT_H
#include "common.h"
+#include "world.h"
+#include "addon.h"
struct{
enum async_operation{
k_async_op_clientloading,
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[] );
-
-
-
-
/*
* Start a new operation or crash if we are already running one. you can avoid
* crashing the game by checking the async status yourself before calling.
*/
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 );
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 */