X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=ent_skateshop.c;h=bfec73f9edaf24fe6082b90af3182f7fb2875478;hb=137d40d96fe923600d8378b8e138e3c276f27ff4;hp=281548248c472b4fdf386b522eb273088065be5e;hpb=bd3a7e904be0fc97e70761cc957a28609d366586;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/ent_skateshop.c b/ent_skateshop.c index 2815482..bfec73f 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -15,6 +15,7 @@ #include "steam.h" #include "addon.h" #include "save.h" +#include "network.h" /* * Checks string equality but does a hash check first @@ -27,7 +28,7 @@ static inline int const_str_eq( u32 hash, const char *str, const char *cmp ) return 0; } -VG_STATIC void skateshop_update_viewpage(void){ +static void skateshop_update_viewpage(void){ u32 page = global_skateshop.selected_board_id/SKATESHOP_VIEW_SLOT_MAX; for( u32 i=0; ipool.count; id++ ){ + addon_cache_entry *entry = vg_pool_item( &cache->pool, id ); + if( entry->state == k_addon_cache_state_load_request ){ + SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + goto launch; + } + } + } + SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + return; +launch: vg_loader_start( board_processview_thread, NULL ); } @@ -90,7 +110,7 @@ VG_STATIC void skateshop_op_processview(void){ /* * VG event init */ -VG_STATIC void skateshop_init(void){ +static void skateshop_init(void){ } static u16 skateshop_selected_cache_id(void){ @@ -102,18 +122,18 @@ static u16 skateshop_selected_cache_id(void){ else return 0; } -VG_STATIC void pointcloud_async_end(void *_, u32 __) +static void pointcloud_async_end(void *_, u32 __) { pointcloud_animate( k_pointcloud_anim_opening ); } -VG_STATIC void pointcloud_clear_async(void *_, u32 __) +static void pointcloud_clear_async(void *_, u32 __) { pointcloud.count = 0; pointcloud_animate( k_pointcloud_anim_opening ); } -VG_STATIC void skateshop_world_preview_loader_thread( void *_data ) +static void skateshop_world_preview_loader_thread( void *_data ) { addon_reg *reg = _data; @@ -151,11 +171,11 @@ VG_STATIC void skateshop_world_preview_loader_thread( void *_data ) } } -VG_STATIC void skateshop_world_preview_loader_thread_and_end( void *_data ){ +static void skateshop_world_preview_loader_thread_and_end( void *_data ){ skateshop_world_preview_loader_thread( _data ); } -VG_STATIC void skateshop_load_world_preview( addon_reg *reg ){ +static void skateshop_load_world_preview( addon_reg *reg ){ vg_loader_start( skateshop_world_preview_loader_thread_and_end, reg ); } @@ -163,7 +183,7 @@ VG_STATIC void skateshop_load_world_preview( addon_reg *reg ){ * VG event preupdate */ void temp_update_playermodel(void); -VG_STATIC void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ +static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ if( !active ) return; /* input filter */ @@ -232,7 +252,7 @@ VG_STATIC void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ if( opage != npage ){ skateshop_update_viewpage(); - skateshop_op_processview(); + //skateshop_op_processview(); } else if( cache_id && button_down( k_srbind_maccept )){ vg_info( "chose board from skateshop (%u)\n", @@ -241,6 +261,7 @@ VG_STATIC void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ addon_cache_unwatch( k_addon_type_board, localplayer.board_view_slot ); addon_cache_watch( k_addon_type_board, cache_id ); localplayer.board_view_slot = cache_id; + network_send_item( k_netmsg_playeritem_board ); world_entity_unfocus(); skaterift_autosave(1); @@ -281,11 +302,12 @@ VG_STATIC void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ } if( changed ){ - player__use_model( &localplayer, global_skateshop.selected_player_id ); - skateshop_op_processview(); + player__use_model( global_skateshop.selected_player_id ); + //skateshop_op_processview(); } if( button_down( k_srbind_maccept ) ){ + network_send_item( k_netmsg_playeritem_player ); world_entity_unfocus(); } } @@ -308,8 +330,7 @@ VG_STATIC void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ if( browseable ){ if( button_down( k_srbind_mleft ) ){ - if( global_skateshop.selected_world_id > 0 ) - { + if( global_skateshop.selected_world_id > 0 ){ global_skateshop.selected_world_id --; change = 1; } @@ -368,12 +389,15 @@ VG_STATIC void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ } if( button_down( k_srbind_mback ) ){ + if( shop->type == k_skateshop_type_charshop ) + network_send_item( k_netmsg_playeritem_player ); + world_entity_unfocus(); return; } } -VG_STATIC void skateshop_render_boardshop( ent_skateshop *shop ){ +static void skateshop_render_boardshop( ent_skateshop *shop ){ world_instance *world = world_current_instance(); u32 slot_count = vg_list_size(global_skateshop.shop_view_slots); @@ -445,7 +469,7 @@ fade_out:; float scale = 0.2f, thickness = 0.03f; - font3d_bind( &gui.font, &skaterift.cam ); + font3d_bind( &gui.font, k_font_shader_default, 0, world, &skaterift.cam ); shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} ); /* Selection counter @@ -466,12 +490,10 @@ fade_out:; i+=highscore_intl( buf+i, addon_count(k_addon_type_board), 3 ); buf[i++] = '\0'; - font3d_simple_draw( &gui.font, 0, k_font_shader_default, - buf, &skaterift.cam, mmdl ); + font3d_simple_draw( 0, buf, &skaterift.cam, mmdl ); } else{ - font3d_simple_draw( &gui.font, 0, k_font_shader_default, - "Nothing installed", &skaterift.cam, mmdl ); + font3d_simple_draw( 0, "Nothing installed", &skaterift.cam, mmdl ); } u16 cache_id = skateshop_selected_cache_id(); @@ -490,18 +512,16 @@ fade_out:; if( global_skateshop.render.reg_id != global_skateshop.selected_board_id ){ global_skateshop.render.item_title = ""; global_skateshop.render.item_desc = ""; - vg_msg root = {0}; - root.buf = reg->metadata; - root.len = reg->metadata_len; - root.max = sizeof(reg->metadata); - - vg_msg workshop = root; - if( vg_msg_seekframe( &workshop, "workshop", 0 ) ){ - const char *title = vg_msg_seekkvstr( &workshop, "title", 0 ); + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + + if( vg_msg_seekframe( &msg, "workshop" ) ){ + const char *title = vg_msg_getkvstr( &msg, "title" ); if( title ) global_skateshop.render.item_title = title; - const char *dsc = vg_msg_seekkvstr( &workshop, "author", 0 ); + const char *dsc = vg_msg_getkvstr( &msg, "author" ); if( dsc ) global_skateshop.render.item_desc = dsc; + vg_msg_skip_frame( &msg ); } global_skateshop.render.reg_id = global_skateshop.selected_board_id; @@ -511,37 +531,33 @@ fade_out:; * ----------------------------------------------------------------- */ m3x3_zero( mlocal ); m3x3_setdiagonalv3( mlocal, (v3f){ scale, scale, thickness } ); - mlocal[3][0] = -font3d_string_width( &gui.font, 0, - global_skateshop.render.item_title ); + mlocal[3][0] = -font3d_string_width( 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, k_font_shader_default, - global_skateshop.render.item_title, + font3d_simple_draw( 0, global_skateshop.render.item_title, &skaterift.cam, mmdl ); /* Author name * ----------------------------------------------------------------- */ scale *= 0.4f; m3x3_setdiagonalv3( mlocal, (v3f){ scale, scale, thickness } ); - mlocal[3][0] = -font3d_string_width( &gui.font, 0, - global_skateshop.render.item_desc ); + mlocal[3][0] = -font3d_string_width( 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, k_font_shader_default, - global_skateshop.render.item_desc, + font3d_simple_draw( 0, global_skateshop.render.item_desc, &skaterift.cam, mmdl ); SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); } -VG_STATIC void skateshop_render_charshop( ent_skateshop *shop ){ +static void skateshop_render_charshop( ent_skateshop *shop ){ } -VG_STATIC void skateshop_render_worldshop( ent_skateshop *shop ){ +static void skateshop_render_worldshop( ent_skateshop *shop ){ world_instance *world = world_current_instance(); ent_marker *mark_display = mdl_arritm( &world->ent_marker, @@ -554,17 +570,15 @@ VG_STATIC void skateshop_render_worldshop( ent_skateshop *shop ){ addon_reg *reg = get_addon_from_index( k_addon_type_world, global_skateshop.selected_world_id ); - vg_msg root = {0}; - root.buf = reg->metadata; - root.len = reg->metadata_len; - root.max = sizeof(reg->metadata); - 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); + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + global_skateshop.render.world_loc = vg_msg_getkvstr( &msg, "location" ); global_skateshop.render.world_reg = global_skateshop.selected_world_id; + + if( vg_msg_seekframe( &msg, "workshop" ) ){ + global_skateshop.render.world_title = vg_msg_getkvstr( &msg, "title"); + vg_msg_skip_frame( &msg ); + } } /* Text */ @@ -607,27 +621,25 @@ VG_STATIC void skateshop_render_worldshop( ent_skateshop *shop ){ m4x3f mtext,mlocal,mtextmdl; mdl_transform_m4x3( &mark_info->transform, mtext ); - font3d_bind( &gui.font, &skaterift.cam ); + font3d_bind( &gui.font, k_font_shader_default, 0, NULL, &skaterift.cam ); shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} ); float scale = 0.2f, thickness = 0.015f, scale1 = 0.08f; m3x3_zero( mlocal ); m3x3_setdiagonalv3( mlocal, (v3f){ scale, scale, thickness } ); - mlocal[3][0] = -font3d_string_width( &gui.font, 0, buftext ); + mlocal[3][0] = -font3d_string_width( 0, buftext ); mlocal[3][0] *= scale*0.5f; mlocal[3][1] = 0.1f; mlocal[3][2] = 0.0f; m4x3_mul( mtext, mlocal, mtextmdl ); - font3d_simple_draw( &gui.font, 0, k_font_shader_default, - buftext, &skaterift.cam, mtextmdl ); + font3d_simple_draw( 0, buftext, &skaterift.cam, mtextmdl ); m3x3_setdiagonalv3( mlocal, (v3f){ scale1, scale1, thickness } ); - mlocal[3][0] = -font3d_string_width( &gui.font, 0, bufsubtext ); + mlocal[3][0] = -font3d_string_width( 0, bufsubtext ); mlocal[3][0] *= scale1*0.5f; mlocal[3][1] = -scale1*0.3f; m4x3_mul( mtext, mlocal, mtextmdl ); - font3d_simple_draw( &gui.font, 0, k_font_shader_default, - bufsubtext, &skaterift.cam, mtextmdl ); + font3d_simple_draw( 0, bufsubtext, &skaterift.cam, mtextmdl ); /* pointcloud */ m4x3f mmdl; @@ -645,7 +657,7 @@ VG_STATIC void skateshop_render_worldshop( ent_skateshop *shop ){ /* * World: render event */ -VG_STATIC void skateshop_render( ent_skateshop *shop ){ +static void skateshop_render( ent_skateshop *shop ){ if( shop->type == k_skateshop_type_boardshop ) skateshop_render_boardshop( shop ); else if( shop->type == k_skateshop_type_charshop ) @@ -659,7 +671,7 @@ VG_STATIC void skateshop_render( ent_skateshop *shop ){ /* * Entity logic: entrance event */ -VG_STATIC void ent_skateshop_call( world_instance *world, ent_call *call ){ +static void ent_skateshop_call( world_instance *world, ent_call *call ){ u32 index = mdl_entity_id_id( call->id ); ent_skateshop *shop = mdl_arritm( &world->ent_skateshop, index ); vg_info( "skateshop_call\n" );