quite a lot of changes
[carveJwlIkooP6JGAAIwe30JlM.git] / world_routes.c
index 1ff33fe8501e9b90201613f1e0701fd63119257a..e83803ca71168368048b74d8609bb86de2ecbf29 100644 (file)
@@ -767,6 +767,33 @@ VG_STATIC void world_routes_surface_grid( world_instance *world,
    }
 }
 
+VG_STATIC void world_write_preview( pointcloud_buffer *pcbuf ){
+   char path_buf[4096];
+   vg_str path;
+   vg_strnull( &path, path_buf, 4096 );
+
+   if( world_loader.reg ){
+      /* Don't want to override the one we get from the workshop */
+      if( world_loader.reg->alias.workshop_id ) return;
+
+      addon_get_content_folder( world_loader.reg, &path );
+   }
+   else{
+      vg_strcat( &path, "maps/" );
+      vg_strcat( &path, world_loader.override_name );
+   }
+
+   vg_strcat( &path, "/preview.bin" );
+
+   if( !vg_strgood( &path ) ) vg_fatal_error( "Path too long\n" );
+   FILE *fp = fopen( path_buf, "wb" );
+   if( !fp ) vg_fatal_error( "Cannot open '%s' for writing\n", path_buf );
+   
+   fwrite( pcbuf, sizeof(struct pointcloud_buffer) + 
+                  sizeof(struct pointcloud_vert)*pcbuf->count, 1, fp );
+   fclose( fp );
+}
+
 /* 
  * Create the strips of colour that run through the world along course paths
  */
@@ -861,23 +888,7 @@ VG_STATIC void world_gen_routes_generate(void)
       vg_info( "Distrubuted %u points over %fkm^2!\n", 
                 pcbuf->count, area/1e6f );
 
-      if( world_loader.location == k_world_load_type_local ){
-         char path_buf[4096];
-         vg_str path;
-         vg_strnull( &path, path_buf, 4096 );
-         vg_strcat( &path, "maps/" );
-         vg_strcat( &path, world_loader.name );
-         vg_strcat( &path, "/preview.bin" );
-
-         if( !vg_strgood( &path ) ) vg_fatal_error( "Path too long\n" );
-         FILE *fp = fopen( path_buf, "wb" );
-         if( !fp ) vg_fatal_error( "Cannot open '%s' for writing\n", path_buf );
-         
-         fwrite( pcbuf, sizeof(pcbuf) + 
-                        sizeof(struct pointcloud_vert)*pcbuf->count, 1, fp );
-         fclose( fp );
-      }
-
+      world_write_preview( pcbuf );
       vg_async_dispatch( call_pointcloud, async_pointcloud_sub );
    }