sorta ready
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_skateshop.c
index b3e648f45aff2a7676a667c792d6d0a3b4543c26..47d8de29333b9a6b4971f4ad3574ef2f5e45f8a3 100644 (file)
@@ -182,29 +182,22 @@ VG_STATIC void workshop_visibile_load_loop(void)
 
          vg_str content_path = folder;
 
-         int found = 0;
-         vg_msg msg;
-         vg_msg_init( &msg, cache_ptr->reg_ptr->metadata, 
+         vg_msg root;
+         vg_msg_init( &root, cache_ptr->reg_ptr->metadata, 
                       cache_ptr->reg_ptr->metadata_len );
-         vg_msg_cmd cmd;
-         while( vg_msg_next( &msg, &cmd ) ){
-            if( (msg.depth == 0) && (cmd.code == k_vg_msg_code_kvstring) ){
-               if( VG_STRDJB2_EQ( "content", cmd.key, cmd.key_djb2 ) ){
-                  vg_strcat( &content_path, "/" );
-                  vg_strcat( &content_path, cmd.value._buf );
-                  found = 1;
-                  break;
-               }
-            }
-         }
 
-         if( !vg_strgood( &content_path ) ) {
-            vg_error( "Metadata path too long\n" );
+         const char *kv_content = vg_msg_seekkvstr( &root, "content", 0 );
+         if( kv_content ){
+            vg_strcat( &content_path, "/" );
+            vg_strcat( &content_path, kv_content );
+         }
+         else{
+            vg_error( "No content paths in metadata\n" );
             goto file_is_broken;
          }
 
-         if( !found ){
-            vg_error( "No content paths in metadata\n" );
+         if( !vg_strgood( &content_path ) ) {
+            vg_error( "Metadata path too long\n" );
             goto file_is_broken;
          }
          
@@ -225,7 +218,7 @@ file_is_broken:;
 
 
 VG_STATIC void world_scan_thread( void *_args ){
-   addon_mount_local_folder( k_workshop_file_type_world, "maps", ".mdl" );
+   addon_mount_content_folder( k_workshop_file_type_world, "maps", ".mdl" );
    addon_mount_workshop_items();
    vg_async_call( async_addon_reg_update, NULL, 0 );
    skaterift_end_op();
@@ -240,7 +233,7 @@ VG_STATIC void skateshop_op_world_scan(void){
 }
 
 VG_STATIC void board_scan_thread( void *_args ){
-   addon_mount_local_folder( k_workshop_file_type_board, "boards", ".mdl" );
+   addon_mount_content_folder( k_workshop_file_type_board, "boards", ".mdl" );
    addon_mount_workshop_items();
    vg_async_call( async_addon_reg_update, NULL, 0 );
    vg_async_stall();
@@ -514,8 +507,10 @@ VG_STATIC void global_skateshop_preupdate(void)
          browseable = 1;
       }
 
-      if( skaterift.async_op == k_async_op_none ){
-         gui_helper_action( button_display_string(k_srbind_maccept), "load" );
+      if( (skaterift.async_op == k_async_op_none) &&
+           global_skateshop.selected_world_id > 0 ){
+         gui_helper_action( button_display_string(k_srbind_maccept), 
+                            "open rift" );
          loadable = 1;
       }
       
@@ -550,7 +545,7 @@ VG_STATIC void global_skateshop_preupdate(void)
 
          /* automatically load in clouds */
          if( loadable && button_down( k_srbind_maccept ) ){
-            vg_info( "Select world (%u)\n", 
+            vg_info( "Select rift (%u)\n", 
                       global_skateshop.selected_world_id );
             skaterift_change_world( reg->foldername );
             return;
@@ -691,7 +686,26 @@ fade_out:;
    }
 
    struct cache_board *cache_ptr = skateshop_selected_cache_if_loaded();
-   if( !cache_ptr ) return;
+
+   if( !cache_ptr ){
+      global_skateshop.render.item_title = "";
+      global_skateshop.render.item_desc = "";
+      return;
+   }
+
+   if( global_skateshop.render.reg_id != global_skateshop.selected_board_id ){
+      addon_reg *reg = cache_ptr->reg_ptr;
+      vg_msg root;
+      vg_msg_init( &root, reg->metadata, reg->metadata_len );
+
+      vg_msg workshop = root;
+      if( vg_msg_seekframe( &workshop, "workshop", 0 ) ){
+         const char *title = vg_msg_seekkvstr( &workshop, "title", 0 );
+         if( title ) global_skateshop.render.item_title = title;
+      }
+
+      global_skateshop.render.reg_id = global_skateshop.selected_board_id;
+   }
 
    addon_reg *reg = cache_ptr->reg_ptr;
 
@@ -699,12 +713,14 @@ fade_out:;
     * ----------------------------------------------------------------- */
    m3x3_zero( mlocal );
    m3x3_setdiagonalv3( mlocal, (v3f){ scale, scale, thickness } );
-   mlocal[3][0] = -font3d_string_width( &gui.font, 0, "Flubber" );
+   mlocal[3][0] = -font3d_string_width( &gui.font, 0, 
+                                        global_skateshop.render.item_title );
    mlocal[3][0] *= scale*0.5f;
    mlocal[3][1] = 0.1f;
    mlocal[3][2] = 0.0f;
    m4x3_mul( mtext, mlocal, mmdl );
-   font3d_simple_draw( &gui.font, 0, "Flubber", &main_camera, mmdl );
+   font3d_simple_draw( &gui.font, 0, global_skateshop.render.item_title, 
+                       &main_camera, mmdl );
 
    /* Author name
     * ----------------------------------------------------------------- */
@@ -715,7 +731,8 @@ fade_out:;
    mlocal[3][1] = 0.0f;
    mlocal[3][2] = 0.0f;
    m4x3_mul( mtext, mlocal, mmdl );
-   font3d_simple_draw( &gui.font, 0, "JA", &main_camera, mmdl );
+   font3d_simple_draw( &gui.font, 0, global_skateshop.render.item_desc, 
+                       &main_camera, mmdl );
 }
 
 VG_STATIC void skateshop_render_charshop(void)
@@ -732,6 +749,20 @@ VG_STATIC void skateshop_render_worldshop(void)
               *mark_info = mdl_arritm( &world->ent_marker, 
                                   mdl_entity_id_id(shop->boards.id_info));
 
+   if( global_skateshop.render.world_reg != global_skateshop.selected_world_id){
+      addon_reg *reg = get_addon_from_index( k_workshop_file_type_world,
+                                       global_skateshop.selected_world_id );
+      vg_msg root;
+      vg_msg_init( &root, reg->metadata, reg->metadata_len );
+      vg_msg workshop = root;
+      if( vg_msg_seekframe( &workshop, "workshop", 0 ) ){
+         global_skateshop.render.world_title = vg_msg_seekkvstr( &workshop, 
+                                                                 "title", 0 );
+      }
+      global_skateshop.render.world_loc = vg_msg_seekkvstr(&root,"location",0);
+      global_skateshop.render.world_reg = global_skateshop.selected_world_id;
+   }
+
    /* Text */
    char buftext[128], bufsubtext[128];
    vg_str info, subtext;
@@ -750,13 +781,13 @@ VG_STATIC void skateshop_render_worldshop(void)
       info.buffer[info.i++] = ' ';
       info.buffer[info.i] = '\0';
 
-      vg_strcat( &info, "AFAWJFKAW" );
+      vg_strcat( &info, global_skateshop.render.world_title );
       if( skaterift.async_op == k_async_op_world_loading ||
           skaterift.async_op == k_async_op_world_preloading ){
          vg_strcat( &subtext, "Loading..." );
       }
       else{
-         vg_strcat( &subtext, "No information" );
+         vg_strcat( &subtext, global_skateshop.render.world_loc );
       }
    }
    else{