sorta ready
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_skateshop.c
index fafd37634d2be72484f5049d292f2ad3245650a5..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,6 +686,7 @@ fade_out:;
    }
 
    struct cache_board *cache_ptr = skateshop_selected_cache_if_loaded();
+
    if( !cache_ptr ){
       global_skateshop.render.item_title = "";
       global_skateshop.render.item_desc = "";
@@ -699,23 +695,13 @@ fade_out:;
 
    if( global_skateshop.render.reg_id != global_skateshop.selected_board_id ){
       addon_reg *reg = cache_ptr->reg_ptr;
-      vg_msg msg;
-      vg_msg_init( &msg, reg->metadata, reg->metadata_len );
-
-      vg_msg_cmd cmd;
-      while( vg_msg_next( &msg, &cmd ) ){
-         if( (msg.depth == 1) && (cmd.code == k_vg_msg_code_frame) ){
-            if( VG_STRDJB2_EQ( "workshop", cmd.key, cmd.key_djb2 ) ){
-               u32 depth = msg.depth;
-               while( (msg.depth == depth) && vg_msg_next( &msg, &cmd ) ){
-                  if( cmd.code == k_vg_msg_code_kvstring ){
-                     if( VG_STRDJB2_EQ( "title", cmd.key, cmd.key_djb2 ) ){
-                        global_skateshop.render.item_title = cmd.value._buf;
-                     }
-                  }
-               }
-            }
-         }
+      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;
@@ -745,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)
@@ -762,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;
@@ -780,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{