basic replayable replays
[carveJwlIkooP6JGAAIwe30JlM.git] / workshop.c
index d0a3883d1793732253b41d4e551fe94b8e4ea043..30ddb5647528410b5cfdbf8debd7c982480fbea0 100644 (file)
@@ -31,9 +31,7 @@ static struct ui_dropdown_opt workshop_form_type_opts[] = {
 /* 
  * Close the form and discard UGC query result
  */
-VG_STATIC void workshop_quit_form(void)
-{
-   skaterift_begin_op( k_async_op_none );  /* safeguard */
+VG_STATIC void workshop_quit_form(void){
    player_board_unload( &workshop_form.board_model );
    workshop_form.file_intent = k_workshop_form_file_intent_none;
 
@@ -46,7 +44,7 @@ VG_STATIC void workshop_quit_form(void)
    }
 
    workshop_form.page = k_workshop_form_hidden;
-   skaterift_end_op();
+   workshop_form.op = k_workshop_op_none;
 }
 
 /*
@@ -150,8 +148,6 @@ VG_STATIC void on_workshop_update_result( void *data, void *user )
 
       vg_error( "Error with the submitted file (%d)\n", result->m_eResult );
    }
-
-   skaterift_end_op();
 }
 
 /*
@@ -245,7 +241,6 @@ VG_STATIC void on_workshop_createitem( void *data, void *user )
 
       workshop_form.page = k_workshop_form_closing_bad;
       workshop_form.failure_or_success_string = errstr;
-      skaterift_end_op();
    }
 }
 
@@ -312,7 +307,6 @@ VG_STATIC void _workshop_form_submit_thread( void *data )
 
    if( !vg_strgood(&folder) ){
       vg_error( "addon folder path too long\n" );
-      vg_async_call( workshop_async_any_complete, NULL, 0 );
       return;
    }
 
@@ -344,7 +338,6 @@ VG_STATIC void _workshop_form_submit_thread( void *data )
    vg_dir dir;
    if( !vg_dir_open( &dir, folder.buffer ) ){
       vg_error( "could not open addon folder '%s'\n", folder.buffer );
-      vg_async_call( workshop_async_any_complete, NULL, 0 );
       return;
    }
 
@@ -372,7 +365,6 @@ VG_STATIC void _workshop_form_submit_thread( void *data )
    vg_strcat( &descriptor_file, "/addon.inf" );
    if( !vg_strgood(&descriptor_file) ){
       vg_error( "Addon info path too long\n" );
-      vg_async_call( workshop_async_any_complete, NULL, 0 );
       return;
    }
    
@@ -380,7 +372,6 @@ VG_STATIC void _workshop_form_submit_thread( void *data )
    if( !fp ){
       vg_error( "Could not open addon info file '%s'\n", 
                 descriptor_file.buffer );
-      vg_async_call( workshop_async_any_complete, NULL, 0 );
       return;
    }
    fwrite( descriptor_buf, descriptor.cur, 1, fp );
@@ -393,7 +384,6 @@ VG_STATIC void _workshop_form_submit_thread( void *data )
 
    if( !vg_strgood(&preview) ){
       vg_error( "preview image path too long\n" );
-      vg_async_call( workshop_async_any_complete, NULL, 0 );
       return;
    }
 
@@ -410,34 +400,35 @@ VG_STATIC void _workshop_form_submit_thread( void *data )
 /*
  * Entry point for the publishing submission operation
  */
-VG_STATIC void workshop_op_submit(void)
-{
+VG_STATIC void workshop_op_submit(void){
    /* TODO: Show these errors to the user */
    if( workshop_form.submission.submit_title ){
       if( !workshop_form.submission.title[0] ){
-         vg_error( "Cannot submit because a title is required\n" );
+         ui_start_modal( "Cannot submit because a title is required\n",
+                         UI_MODAL_WARN);
          return;
       }
    }
 
    if( workshop_form.submission.submit_description ){
       if( !workshop_form.submission.description[0] ){
-         vg_error( "Cannot submit because a description is required\n" );
+         ui_start_modal( "Cannot submit because a description is required\n",
+                         UI_MODAL_WARN );
          return;
       }
    }
 
    if( workshop_form.submission.submit_file_and_image ){
       if( workshop_form.file_intent == k_workshop_form_file_intent_none ){
-         vg_error( "Cannot submit because the file is empty or unspecified\n" );
+         ui_start_modal( "Cannot submit because the file is "
+                         "empty or unspecified\n", UI_MODAL_WARN );
          return;
       }
    }
 
-   skaterift_begin_op( k_workshop_form_op_publishing_update );
-
    player_board_unload( &workshop_form.board_model );
    workshop_form.file_intent = k_workshop_form_file_intent_none;
+   workshop_form.op = k_workshop_op_publishing_update;
 
    vg_loader_start( _workshop_form_submit_thread, NULL );
 }
@@ -459,15 +450,12 @@ VG_STATIC void workshop_form_loadmodel_async_complete( void *payload, u32 size )
    workshop_form.file_intent = k_workshop_form_file_intent_new;
    
    vg_success( "workshop async load complete\n" );
-   skaterift_end_op();
 }
 
 /*
  * Reciever for failure to load
  */
-VG_STATIC void workshop_form_loadmodel_async_error( void *payload, u32 size )
-{
-   skaterift_end_op();
+VG_STATIC void workshop_form_loadmodel_async_error( void *payload, u32 size ){
 }
 
 /*
@@ -533,8 +521,7 @@ VG_STATIC void _workshop_form_load_thread( void *data )
 /*
  * Entry point for load model operation
  */
-VG_STATIC void workshop_op_load_model(void)
-{
+VG_STATIC void workshop_op_load_model(void){
    if( workshop_form.submission.type == k_addon_type_world ){
       vg_warn( "WORLD LOAD INFO Currently unsupported\n" );
       return;
@@ -547,12 +534,12 @@ VG_STATIC void workshop_op_load_model(void)
             mdl_arritm( &workshop_form.view_world->ent_swspreview, 0 );
    }
    else{
-      vg_error( "There is no ent_swspreview in the level. "
-                "Cannot publish here\n" );
+      ui_start_modal( "There is no ent_swspreview in the level. \n"
+                      "Cannot publish here\n", UI_MODAL_BAD );
       return;
    }
 
-   skaterift_begin_op( k_workshop_form_op_loading_model );
+   workshop_form.op = k_workshop_op_loading_model;
    vg_loader_start( _workshop_form_load_thread, NULL );
 }
 
@@ -583,8 +570,6 @@ VG_STATIC void workshop_form_async_imageload( void *data, u32 len )
                 stbi_failure_reason() );
       ui_start_modal( workshop_form.error_msg, UI_MODAL_BAD );
    }
-   
-   skaterift_end_op();
 }
 
 /*
@@ -650,6 +635,7 @@ VG_STATIC void on_workshop_download_ugcpreview( void *data, void *user )
  */
 VG_STATIC void workshop_op_download_and_view_submission( int result_index )
 {
+   workshop_form.op = k_workshop_op_downloading_submission;
    ISteamUGC *hSteamUGC = SteamAPI_SteamUGC();
    ISteamRemoteStorage *hSteamRemoteStorage = SteamAPI_SteamRemoteStorage();
    SteamUGCDetails_t details;
@@ -658,7 +644,6 @@ VG_STATIC void workshop_op_download_and_view_submission( int result_index )
                                              result_index,
                                              &details ) )
    {
-      skaterift_begin_op( k_workshop_form_op_downloading_submission );
       workshop_reset_submission_data();
       workshop_form.submission.submit_description = 0;
       workshop_form.submission.submit_file_and_image = 0;
@@ -775,7 +760,6 @@ VG_STATIC void workshop_op_download_and_view_submission( int result_index )
    }
    else{
       vg_error( "GetQueryUGCResult: Index out of range\n" );
-      skaterift_end_op();
    }
 }
 
@@ -1014,8 +998,9 @@ VG_STATIC void workshop_render_board_preview(void){
                     sizeof(struct ub_world_lighting), &world->ub_lighting );
 
    render_world( world, &cam, 1 );
-   render_board( &cam, world, board, mmdl,  k_board_shader_entity );
-   render_board( &cam, world, board, mmdl1, k_board_shader_entity );
+   struct board_pose pose = {0};
+   render_board( &cam, world, board, mmdl,  &pose, k_board_shader_entity );
+   render_board( &cam, world, board, mmdl1, &pose, k_board_shader_entity );
 
    glBindFramebuffer( GL_FRAMEBUFFER, 0 );
    glViewport( 0,0, vg.window_x, vg.window_y );
@@ -1428,7 +1413,7 @@ VG_STATIC void workshop_form_gui(void)
    ui_rect quit_button;
    ui_split( title, k_ui_axis_v, title[2]-title[3], 2, title, quit_button );
 
-   if( skaterift.async_op == k_async_op_none ){
+   if( vg_loader_availible() ){
       if( ui_button_text( quit_button, "X", 1 ) ){
          workshop_quit_form();
          return;
@@ -1441,19 +1426,19 @@ VG_STATIC void workshop_form_gui(void)
     * escapes here and we show them a basic string
     */
 
-   if( skaterift.async_op != k_async_op_none ){
+   if( !vg_loader_availible() ){
       const char *op_string = "The programmer has not bothered to describe "
                               "the current operation that is running.";
 
-      switch( skaterift.async_op ){
-         case k_workshop_form_op_loading_model:
+      switch( skaterift.op ){
+         case k_workshop_op_loading_model:
             op_string = "Operation in progress: Loading model file.";
          break;
-         case k_workshop_form_op_publishing_update:
+         case k_workshop_op_publishing_update:
             op_string = "Operation in progress: publishing submission update "
                         "to steam.";
          break;
-         case k_workshop_form_op_downloading_submission:
+         case k_workshop_op_downloading_submission:
             op_string = "Operation in progress: downloading existing submission"
                         " from Steam services.";
          break;