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;
}
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();
vg_loader_start( world_scan_thread, NULL );
}
+VG_STATIC void board_processview_thread( void *_args ){
+ workshop_visibile_load_loop();
+ skaterift_end_op();
+}
+
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();
- workshop_visibile_load_loop();
- skaterift_end_op();
+ board_processview_thread(NULL);
}
VG_STATIC void skateshop_op_board_scan(void){
vg_loader_start( board_scan_thread, NULL );
}
+VG_STATIC void skateshop_op_processview(void){
+ skaterift_begin_op( k_async_op_board_scan );
+ vg_loader_start( board_processview_thread, NULL );
+}
+
/*
* Regular stuff
* -----------------------------------------------------------------------------
* ----------------------
*/
+ u32 opage = global_skateshop.selected_board_id/SKATESHOP_VIEW_SLOT_MAX;
+
if( button_down( k_srbind_mleft ) ){
if( global_skateshop.selected_board_id > 0 ){
global_skateshop.selected_board_id --;
}
}
- if( selected_cache && button_down( k_srbind_maccept ) ){
+ u32 npage = global_skateshop.selected_board_id/SKATESHOP_VIEW_SLOT_MAX;
+
+ if( opage != npage ){
+ skateshop_update_viewpage();
+ skateshop_op_processview();
+ }
+ else if( selected_cache && button_down( k_srbind_maccept ) ){
vg_info( "chose board from skateshop (%u)\n",
global_skateshop.selected_board_id );
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;
}
/* 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;
}
struct cache_board *cache_ptr = skateshop_selected_cache_if_loaded();
+
if( !cache_ptr ){
global_skateshop.render.item_title = "";
global_skateshop.render.item_desc = "";
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;
+
+ const char *dsc = vg_msg_seekkvstr( &workshop, "author", 0 );
+ if( dsc ) global_skateshop.render.item_desc = dsc;
}
global_skateshop.render.reg_id = global_skateshop.selected_board_id;
* ----------------------------------------------------------------- */
scale *= 0.4f;
m3x3_setdiagonalv3( mlocal, (v3f){ scale, scale, thickness } );
- mlocal[3][0] = -font3d_string_width( &gui.font, 0, "JA" );
+ mlocal[3][0] = -font3d_string_width( &gui.font, 0,
+ global_skateshop.render.item_desc );
mlocal[3][0] *= scale*0.5f;
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)
*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;
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{