X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=workshop.c;h=6f715790a56555e73a9eddbd4c08f5b743712168;hb=7b1e8a237acc3121c86fab9b5946da6a8d3bf6c4;hp=bcb8574a016497006818e5ad81084cc8083c7876;hpb=460613225c0918fe71bcdb14fbd131e26b863296;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/workshop.c b/workshop.c index bcb8574..6f71579 100644 --- a/workshop.c +++ b/workshop.c @@ -534,7 +534,19 @@ VG_STATIC void _workshop_form_load_thread( void *data ) VG_STATIC void workshop_op_load_model(void) { if( workshop_form.submission.type == k_workshop_file_type_world ){ - vg_error( "Currently unsupported\n" ); + vg_warn( "WORLD LOAD INFO Currently unsupported\n" ); + return; + } + + workshop_form.view_world = world_current_instance(); + + if( mdl_arrcount( &workshop_form.view_world->ent_swspreview ) ){ + workshop_form.ptr_ent = + mdl_arritm( &workshop_form.view_world->ent_swspreview, 0 ); + } + else{ + vg_error( "There is no ent_swspreview in the level. " + "Cannot publish here\n" ); return; } @@ -683,7 +695,7 @@ VG_STATIC void workshop_op_download_and_view_submission( int result_index ) vg_msg root; vg_msg_init( &root, metadata_buf, len/2 ); - vg_msg workshop; + vg_msg workshop = root; if( vg_msg_seekframe( &workshop, "workshop", k_vg_msg_first )){ vg_msg_cmd kv_type = vg_msg_seekkv( &workshop, "type", k_vg_msg_first ); @@ -900,26 +912,24 @@ VG_STATIC void workshop_init(void) vg_console_reg_cmd( "workshop_submit", workshop_submit_command, NULL ); } -VG_STATIC void workshop_find_preview_entity(void) -{ - workshop_form.view_world = world_current_instance(); +VG_STATIC void workshop_render_world_preview(void){ + render_fb_bind( gpipeline.fb_workshop_preview, 0 ); - if( mdl_arrcount( &workshop_form.view_world->ent_swspreview ) ){ - workshop_form.ptr_ent = - mdl_arritm( &workshop_form.view_world->ent_swspreview, 0 ); - workshop_form.page = k_workshop_form_edit; - } - else{ - vg_error( "There is no ent_swspreview in the level. " - "Cannot publish here\n" ); - } + glClearColor( 0.0f, 0.0f, 0.3f, 1.0f ); + glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); + glEnable( GL_DEPTH_TEST ); + glDisable( GL_BLEND ); + + render_world( localplayer.viewable_world, &main_camera, 1 ); + + glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + glViewport( 0,0, vg.window_x, vg.window_y ); } /* * Redraw the model file into the workshop framebuffer */ -VG_STATIC void workshop_render_preview(void) -{ +VG_STATIC void workshop_render_board_preview(void){ if( !workshop_form.ptr_ent ){ return; } @@ -1024,88 +1034,65 @@ VG_STATIC void workshop_changed_description( char *buf, u32 len ){ workshop_form.submission.submit_description = 1; } -VG_STATIC void workshop_form_gui_edit_page( ui_rect content ) -{ - if( workshop_form.submission.type == k_workshop_file_type_none ){ - ui_rect box; - rect_copy( content, box ); - box[3] = 128; - box[2] = (box[2]*2)/3; - ui_rect_center( content, box ); - - ui_rect row; - ui_split( box, k_ui_axis_h, 28, 0, row, box ); - ui_text( row, "Select the type of item\n", 1, k_ui_align_middle_center,0); - ui_split( box, k_ui_axis_h, 28, 0, row, box ); - ui_enum( row, "Type:", workshop_form_type_opts, - 3, &workshop_form.submission.submission_type_selection ); - ui_split( box, k_ui_axis_h, 8, 0, row, box ); - ui_split( box, k_ui_axis_h, 28, 0, row, box ); - - ui_rect button_l, button_r; - rect_copy( row, button_l ); - button_l[2] = 128*2; - ui_rect_center( row, button_l ); - ui_split_ratio( button_l, k_ui_axis_v, 0.5f, 2, button_l, button_r ); - - if( workshop_form.submission.submission_type_selection.value != - k_workshop_file_type_none ){ - if( ui_button_text( button_l, "OK", 1 ) ){ - workshop_form.submission.type = +VG_STATIC void workshop_form_gui_page_undecided( ui_rect content ){ + ui_rect box; + rect_copy( content, box ); + box[3] = 128; + box[2] = (box[2]*2)/3; + ui_rect_center( content, box ); + + ui_rect row; + ui_split( box, k_ui_axis_h, 28, 0, row, box ); + ui_text( row, "Select the type of item\n", 1, k_ui_align_middle_center,0); + ui_split( box, k_ui_axis_h, 28, 0, row, box ); + ui_enum( row, "Type:", workshop_form_type_opts, + 3, &workshop_form.submission.submission_type_selection ); + ui_split( box, k_ui_axis_h, 8, 0, row, box ); + ui_split( box, k_ui_axis_h, 28, 0, row, box ); + + ui_rect button_l, button_r; + rect_copy( row, button_l ); + button_l[2] = 128*2; + ui_rect_center( row, button_l ); + ui_split_ratio( button_l, k_ui_axis_v, 0.5f, 2, button_l, button_r ); + + if( workshop_form.submission.submission_type_selection.value != + k_workshop_file_type_none ){ + if( ui_button_text( button_l, "OK", 1 ) ){ + enum workshop_file_type type = workshop_form.submission.submission_type_selection.value; + workshop_form.submission.type = type; + + if( type == k_workshop_file_type_world ){ + workshop_form.view_changed = 1; + workshop_form.file_intent = k_workshop_form_file_intent_new; } } - else{ - ui_fill( button_l, ui_colour(k_ui_bg) ); - ui_text( button_l, "OK", 1, k_ui_align_middle_center, - ui_colour(k_ui_bg+4) ); - } - - if( ui_button_text( button_r, "Cancel", 1 ) ){ - workshop_form.page = k_workshop_form_open; - workshop_form.file_intent = k_workshop_form_file_intent_none; - } - return; } - - if( workshop_form.submission.type == k_workshop_file_type_world ){ - ui_rect box; - rect_copy( content, box ); - box[3] = 128; - box[2] = (box[2]*2)/3; - ui_rect_center( content, box ); - - ui_rect row; - ui_split( box, k_ui_axis_h, 28, 0, row, box ); - ui_text( row, "World submissions are currently not ready, sorry.", - 1, k_ui_align_middle_center,0); - ui_split( box, k_ui_axis_h, 8, 0, row, box ); - ui_split( box, k_ui_axis_h, 28, 0, row, box ); - - ui_rect button; - rect_copy( row, button ); - button[2] = 128; - ui_rect_center( row, button ); - if( ui_button_text( button, "OK", 1 ) ){ - workshop_form.page = k_workshop_form_open; - workshop_form.file_intent = k_workshop_form_file_intent_none; - } - - return; + else{ + ui_fill( button_l, ui_colour(k_ui_bg) ); + ui_text( button_l, "OK", 1, k_ui_align_middle_center, + ui_colour(k_ui_bg+4) ); } + + if( ui_button_text( button_r, "Cancel", 1 ) ){ + workshop_form.page = k_workshop_form_open; + workshop_form.file_intent = k_workshop_form_file_intent_none; + } +} - ui_rect image_plane; - ui_split( content, k_ui_axis_h, 300, 0, image_plane, content ); - ui_fill( image_plane, ui_colour( k_ui_bg+0 ) ); - - ui_rect img_box; - ui_fit_item( image_plane, (ui_px[2]){ 3, 2 }, img_box ); - +VG_STATIC void workshop_form_gui_draw_preview( ui_rect img_box ){ + enum workshop_file_type type = workshop_form.submission.type; if( workshop_form.file_intent == k_workshop_form_file_intent_keep_old ){ ui_image( img_box, gpipeline.fb_workshop_preview->attachments[0].id ); } else if( workshop_form.file_intent == k_workshop_form_file_intent_new ){ ui_image( img_box, gpipeline.fb_workshop_preview->attachments[0].id ); + + if( type == k_workshop_file_type_world ){ + return; + } + int hover = ui_inside_rect( img_box, vg_ui.mouse ), target = ui_inside_rect( img_box, vg_ui.mouse_click ); @@ -1159,12 +1146,28 @@ VG_STATIC void workshop_form_gui_edit_page( ui_rect content ) ui_text( img_box, "No image", 1, k_ui_align_middle_center, ui_colour( k_ui_orange ) ); } +} + +VG_STATIC void workshop_form_gui_edit_page( ui_rect content ){ + enum workshop_file_type type = workshop_form.submission.type; + + if( type == k_workshop_file_type_none ){ + workshop_form_gui_page_undecided( content ); + return; + } + + ui_rect image_plane; + ui_split( content, k_ui_axis_h, 300, 0, image_plane, content ); + ui_fill( image_plane, ui_colour( k_ui_bg+0 ) ); + + ui_rect img_box; + ui_fit_item( image_plane, (ui_px[2]){ 3, 2 }, img_box ); + workshop_form_gui_draw_preview( img_box ); /* file path */ ui_rect null, file_entry, file_button, file_label; ui_split( content, k_ui_axis_h, 8, 0, null, content ); ui_split( content, k_ui_axis_h, 28, 0, file_entry, content ); - ui_split( file_entry, k_ui_axis_v, -128, 0, file_entry, file_button ); if( workshop_form.submission.type == k_workshop_file_type_board ){ ui_label( file_entry, "Addon folder: skaterift/boards/", @@ -1175,27 +1178,36 @@ VG_STATIC void workshop_form_gui_edit_page( ui_rect content ) 1, 8, file_entry ); } - if( workshop_form.file_intent != k_workshop_form_file_intent_none ){ - ui_text( file_entry, workshop_form.addon_folder, 1, - k_ui_align_middle_left, ui_colour( k_ui_fg+4 ) ); - - if( ui_button_text( file_button, "Remove", 1 ) ){ - player_board_unload( &workshop_form.board_model ); - workshop_form.file_intent = k_workshop_form_file_intent_none; - workshop_form.addon_folder[0] = '\0'; - } - } - else{ + if( type == k_workshop_file_type_world ){ struct ui_textbox_callbacks callbacks = { .change = workshop_changed_model_path }; - ui_textbox( file_entry, workshop_form.addon_folder, vg_list_size(workshop_form.addon_folder), 0, &callbacks ); + } + else{ + ui_split( file_entry, k_ui_axis_v, -128, 0, file_entry, file_button ); + if( workshop_form.file_intent != k_workshop_form_file_intent_none ){ + ui_text( file_entry, workshop_form.addon_folder, 1, + k_ui_align_middle_left, ui_colour( k_ui_fg+4 ) ); + + if( ui_button_text( file_button, "Remove", 1 ) ){ + player_board_unload( &workshop_form.board_model ); + workshop_form.file_intent = k_workshop_form_file_intent_none; + workshop_form.addon_folder[0] = '\0'; + } + } + else{ + struct ui_textbox_callbacks callbacks = { + .change = workshop_changed_model_path + }; + + ui_textbox( file_entry, workshop_form.addon_folder, + vg_list_size(workshop_form.addon_folder), 0, &callbacks ); - if( ui_button_text( file_button, "Load", 1 ) ){ - workshop_find_preview_entity(); - workshop_op_load_model(); + if( ui_button_text( file_button, "Load", 1 ) ){ + workshop_op_load_model(); + } } } @@ -1369,7 +1381,6 @@ VG_STATIC void workshop_form_gui_sidebar( ui_rect sidebar ) workshop_form.submission.submit_description = 1; workshop_form.submission.submit_file_and_image = 1; workshop_form.page = k_workshop_form_edit; - workshop_find_preview_entity(); } for( int i=0; i