enable workshop world submissions
[carveJwlIkooP6JGAAIwe30JlM.git] / skaterift.h
index 5d250a1fe7e0978afcdd278bde4f436823065d95..a139476f8d3878ed8d5d30bb05c86e2217b0fecc 100644 (file)
@@ -2,6 +2,8 @@
 #define SKATERIFT_H
 
 #include "common.h"
+#include "world.h"
+#include "addon.h"
 
 struct{
    enum async_operation{
@@ -10,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[] );
 
 /*
@@ -30,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 );
@@ -52,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 */