srinput.state = k_input_state_resume;
}
+static void skateshop_accept_board( u16 cache_id )
+{
+ vg_info( "chose board from skateshop (%u)\n", _skateshop.selected_board_id );
+ 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 );
+ gui_helper_reset( k_gui_helper_mode_clear );
+ skateshop_playermod( 0 );
+ _skateshop.open = 0;
+}
+
+static void skateshop_accept_playermodel(void)
+{
+ addon_reg *addon = get_addon_from_index( k_addon_type_player, _skateshop.selected_player_id, 0, ADDON_REG_HIDDEN );
+ u32 real_id = get_index_from_addon( k_addon_type_player, addon,0,0 );
+ player__use_model( real_id );
+ network_send_item( k_netmsg_playeritem_player );
+}
+
void ent_skateshop_update(void)
{
if( _world.event != k_world_event_shop )
if( button_down( k_srbind_mback ) )
{
_skateshop.open = 0;
-
- if( shop->type == k_skateshop_type_charshop )
- network_send_item( k_netmsg_playeritem_player );
-
gui_helper_reset( k_gui_helper_mode_clear );
-
skateshop_playermod( 0 );
srinput.state = k_input_state_resume;
return;
_skateshop.selected_board_id --;
}
- u32 valid_count = addon_count( k_addon_type_board, 0,0 );
if( button_down( k_srbind_mright ) )
{
+ u32 valid_count = addon_count( k_addon_type_board, 0,0 );
if( _skateshop.selected_board_id+1 < valid_count )
_skateshop.selected_board_id ++;
}
u32 npage = _skateshop.selected_board_id/SKATESHOP_VIEW_SLOT_MAX;
-
if( opage != npage )
skateshop_update_viewpage();
+
else if( cache_id && button_down( k_srbind_maccept ))
{
- vg_info( "chose board from skateshop (%u)\n", _skateshop.selected_board_id );
-
- 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 );
- gui_helper_reset( k_gui_helper_mode_clear );
- skateshop_playermod( 0 );
- _skateshop.open = 0;
+ skateshop_accept_board( cache_id );
return;
}
}
}
if( changed )
- {
- addon_reg *addon = get_addon_from_index( k_addon_type_player, _skateshop.selected_player_id,
- 0, ADDON_REG_HIDDEN );
- u32 real_id = get_index_from_addon( k_addon_type_player, addon,0,0 );
- player__use_model( real_id );
- }
+ skateshop_accept_playermodel();
if( button_down( k_srbind_maccept ) )
{
- network_send_item( k_netmsg_playeritem_player );
gui_helper_reset( k_gui_helper_mode_clear );
skateshop_playermod( 0 );
_skateshop.open = 0;
slot->view_blend = vg_lerpf( slot->view_blend, selected, rate );
}
- ent_marker *mark_info = af_arritm( &world->ent_marker,
- mdl_entity_id_id(shop->boards.id_info));
+ ent_marker *mark_info = af_arritm( &world->ent_marker, mdl_entity_id_id(shop->boards.id_info));
m4x3f mtext, mrack;
mdl_transform_m4x3( &mark_info->transform, mtext );
mdl_transform_m4x3( &mark_rack->transform, mrack );
else
return k_entity_call_result_unhandled;
}
+
+void ent_skateshop_gui( ui_context *ctx )
+{
+ if( _world.event == k_world_event_shop )
+ {
+ if( _skateshop.open )
+ {
+ if( vg_input.display_input_method != k_input_method_kbm )
+ return;
+
+ ent_skateshop *shop = _skateshop.current_shop;
+ if( shop->type != k_skateshop_type_boardshop && shop->type != k_skateshop_type_charshop )
+ return;
+
+ ui_capture_mouse(ctx, 1);
+ world_instance *world = &_world.main;
+ ent_marker *rack_marker = af_arritm( &world->ent_marker, mdl_entity_id_id(shop->boards.id_rack) );
+ m4x3f mmdl;
+ mdl_transform_m4x3( &rack_marker->transform, mmdl );
+ vg_camera *cam = &g_render.cam;
+
+ v4f handles[3] = {{ 2.0f, 0.0f, 0.0f, 1.0f },{ -2.0f, 0.0f, 0.0f, 1.0f },{0,0,0,1}};
+
+ if( shop->type == k_skateshop_type_charshop )
+ {
+ handles[0][0] = -1.2f;
+ handles[1][0] = 1.2f;
+ }
+
+ for( u32 i=0; i<3; i ++ )
+ {
+ m4x3_mulv( mmdl, handles[i], handles[i] );
+ m4x4_mulv( cam->mtx.pv, handles[i], handles[i] );
+ v2_divs( handles[i], handles[i][3], handles[i] );
+ v2_muladds( (v2f){0.5f,0.5f}, handles[i], 0.5f, handles[i] );
+ handles[i][1] = 1.0f - handles[i][1];
+ v2_mul( (v2f){ vg.window_x, vg.window_y }, handles[i], handles[i] );
+ }
+
+ ui_px r = 24;
+ ui_rect left_box = { handles[0][0] - r, handles[0][1] - r, r*2, r*2 },
+ right_box = { handles[1][0] - r, handles[1][1] - r, r*2, r*2 },
+ accept_box= { handles[2][0] - 64, handles[2][1] + 200, 128, 48 };
+
+ ctx->font = &vgf_default_title;
+
+ u32 original_page;
+ bool changed_playermodel = 0;
+
+ if( shop->type == k_skateshop_type_boardshop )
+ original_page = _skateshop.selected_board_id/SKATESHOP_VIEW_SLOT_MAX;
+
+ if( menu_button_rect( ctx, left_box, 0, 1, "<" ) )
+ {
+ if( shop->type == k_skateshop_type_boardshop )
+ {
+ if( _skateshop.selected_board_id > 0 )
+ _skateshop.selected_board_id --;
+ }
+ else if( shop->type == k_skateshop_type_charshop )
+ {
+ u32 valid_count = addon_count( k_addon_type_player, 0, ADDON_REG_HIDDEN );
+
+ if( _skateshop.selected_player_id > 0 )
+ _skateshop.selected_player_id --;
+ else
+ _skateshop.selected_player_id = valid_count-1;
+
+ changed_playermodel = 1;
+ }
+ }
+ if( menu_button_rect( ctx, right_box, 0,1, ">" ) )
+ {
+ if( shop->type == k_skateshop_type_boardshop )
+ {
+ u32 valid_count = addon_count( k_addon_type_board, 0,0 );
+ if( _skateshop.selected_board_id+1 < valid_count )
+ _skateshop.selected_board_id ++;
+ }
+ else if( shop->type == k_skateshop_type_charshop )
+ {
+ u32 valid_count = addon_count( k_addon_type_player, 0, ADDON_REG_HIDDEN );
+ if( _skateshop.selected_player_id+1 < valid_count )
+ _skateshop.selected_player_id ++;
+ else
+ _skateshop.selected_player_id = 0;
+
+ changed_playermodel = 1;
+ }
+ }
+
+ if( shop->type == k_skateshop_type_boardshop )
+ {
+ u32 new_page = _skateshop.selected_board_id/SKATESHOP_VIEW_SLOT_MAX;
+ if( original_page != new_page )
+ skateshop_update_viewpage();
+ }
+ else if( shop->type == k_skateshop_type_charshop )
+ {
+ if( changed_playermodel )
+ {
+ skateshop_accept_playermodel();
+ }
+ }
+
+ if( menu_button_rect( ctx, accept_box, 0,1, "Pick" ) )
+ {
+ if( shop->type == k_skateshop_type_boardshop )
+ {
+ u16 cache_id = skateshop_selected_cache_id();
+ if( cache_id )
+ skateshop_accept_board( cache_id );
+ }
+ else if( shop->type == k_skateshop_type_charshop )
+ {
+ _skateshop.open = 0;
+ gui_helper_reset( k_gui_helper_mode_clear );
+ skateshop_playermod( 0 );
+ srinput.state = k_input_state_resume;
+ }
+ }
+
+ ctx->font = &vgf_default_small;
+ }
+ }
+}