From 61d4952a59c72dab12aa5cb9100d4433b2cdcedf Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 26 May 2024 14:58:02 +0100 Subject: [PATCH] update for ui api --- gui.h | 60 +++---- menu.c | 367 +++++++++++++++++++++--------------------- menu.h | 2 +- network.c | 17 +- player.c | 29 ++-- player.h | 9 +- player_common.c | 2 +- player_dead.c | 2 +- player_dead.h | 2 +- player_drive.c | 4 +- player_drive.h | 2 +- player_glide.c | 9 +- player_glide.h | 2 +- player_remote.c | 199 +++++++++++++---------- player_remote.h | 10 +- player_replay.c | 148 ++++++++--------- player_replay.h | 4 +- player_skate.c | 22 ++- player_skate.h | 5 +- player_walk.c | 14 +- player_walk.h | 2 +- render.c | 5 +- render.h | 2 +- skaterift.c | 43 ++--- workshop.c | 394 ++++++++++++++++++++++++++++------------------ workshop.h | 2 +- world_render.c | 15 +- world_render.h | 2 +- world_routes_ui.c | 38 +++-- world_routes_ui.h | 2 +- 30 files changed, 784 insertions(+), 630 deletions(-) diff --git a/gui.h b/gui.h index a0de270..3823c15 100644 --- a/gui.h +++ b/gui.h @@ -140,7 +140,7 @@ static void gui_render_icons(void) gui.icon_draw_count = 0; } -static void gui_draw(void) +static void gui_draw( ui_context *ctx ) { if( gui.active_positional_helper && (v3_dist2(localplayer.rb.co,gui.trick_co) > 2.0f) ) @@ -151,9 +151,9 @@ static void gui_draw(void) gui.factive = vg_lerpf( gui.factive, gui.helper_count?1.0f:0.0f, vg.time_frame_delta*2.0f ); - - ui_font_face( &vgf_default_title ); - ui_px height = ui_current_font()->ch + 16; + + ctx->font = &vgf_default_title; + ui_px height = ctx->font->ch + 16; ui_rect lwr = { 0, vg.window_y - height, vg.window_x, height }; ui_px x = 0; @@ -172,34 +172,34 @@ static void gui_draw(void) f32 opacity = 0.4f; if( helper->greyed ) { - fg = ui_colour(k_ui_fg+2); + fg = ui_colour(ctx, k_ui_fg+2); opacity = 0.1f; } - struct ui_vert *bg = ui_fill( box, ui_opacity( GUI_COL_DARK, opacity ) ); + struct ui_vert *bg = ui_fill( ctx, box, + ui_opacity( GUI_COL_DARK, opacity ) ); u32 w; box[0] += 16; - w = ui_text( box, buf, 1, k_ui_align_middle_left, fg ); - w *= ui_current_font()->sx; + w = ui_text( ctx, box, buf, 1, k_ui_align_middle_left, fg ); + w *= ctx->font->sx; bg[1].co[0] = x + w + 32; bg[2].co[0] = x + w + 32; x += w + 32; box[0] = x; - bg = ui_fill( box, ui_opacity( GUI_COL_NORM, opacity*0.7f ) ); + bg = ui_fill( ctx, box, ui_opacity( GUI_COL_NORM, opacity*0.7f ) ); box[0] += 8; - w = ui_text( box, helper->text, 1, k_ui_align_middle_left, fg ); - w *= ui_current_font()->sx; + w = ui_text( ctx, box, helper->text, 1, k_ui_align_middle_left, fg ); + w *= ctx->font->sx; bg[1].co[0] = box[0] + w + 16; bg[2].co[0] = box[0] + w + 16; x += w + 32; } - ui_context *ctx = ui_current_context(); - ctx->frosting = gui.factive*0.015f; - ui_flush( k_ui_shader_colour ); - ctx->frosting = 0.0f; + vg_ui.frosting = gui.factive*0.015f; + ui_flush( ctx, k_ui_shader_colour, NULL ); + vg_ui.frosting = 0.0f; f64 loc_t = (vg.time_real - gui.location_time) / 5.0; @@ -209,24 +209,26 @@ static void gui_draw(void) o = 1.0f-t*t*(2.0f-t); ui_rect box = { 0, (vg.window_y*2)/3 - height/2, vg.window_x, height }; - ui_fill( box, ui_opacity( GUI_COL_NORM, 0.5f ) ); - ui_text( box, gui.location, 1, k_ui_align_middle_center, 0 ); + ui_fill( ctx, box, ui_opacity( GUI_COL_NORM, 0.5f ) ); + ui_text( ctx, box, gui.location, 1, k_ui_align_middle_center, 0 ); - ctx->colour[3] = o; - ui_flush( k_ui_shader_colour ); + vg_ui.colour[3] = o; + ui_flush( ctx, k_ui_shader_colour, NULL ); } - ctx->colour[3] = 1.0f; - ui_font_face( &vgf_default_small ); + vg_ui.colour[3] = 1.0f; + ctx->font = &vgf_default_small; } static int gui_location_print_ccmd( int argc, const char *argv[] ) { - if( argc > 0 ){ + if( argc > 0 ) + { char new_loc[64]; vg_str str; vg_strnull( &str, new_loc, 64 ); - for( int i=0; ifont->sx, hb = b/2; ui_rect a0 = { rect[0] - 20 - hb, rect[1] + rect[3]/2 - hb, b,b }, a1 = { rect[0] + rect[2] + 20 + hb, rect[1] + rect[3]/2 - hb, b,b }; - ui_text( a0, "\x95", 1, k_ui_align_middle_center, 0 ); - ui_text( a1, "\x93", 1, k_ui_align_middle_center, 0 ); + ui_text( ctx, a0, "\x95", 1, k_ui_align_middle_center, 0 ); + ui_text( ctx, a1, "\x93", 1, k_ui_align_middle_center, 0 ); } -static void menu_standard_widget( ui_rect inout_panel, ui_rect rect, ui_px s ) +static void menu_standard_widget( ui_context *ctx, + ui_rect inout_panel, ui_rect rect, ui_px s ) { - ui_split( inout_panel, k_ui_axis_h, ui_current_context()->font->sy*s*2, + ui_split( inout_panel, k_ui_axis_h, ctx->font->sy*s*2, 8, rect, inout_panel ); } -static bool menu_slider( ui_rect inout_panel, bool select, const char *label, +static bool menu_slider( ui_context *ctx, + ui_rect inout_panel, bool select, const char *label, const f32 disp_min, const f32 disp_max, f32 *value, const char *format ) { ui_rect rect, box; - menu_standard_widget( inout_panel, rect, 1 ); - ui_label( rect, label, 1, 8, box ); + menu_standard_widget( ctx, inout_panel, rect, 1 ); + ui_label( ctx, rect, label, 1, 8, box ); f32 t; - enum ui_button_state state = ui_slider_base( box, 0, 1, value, &t ), + enum ui_button_state state = ui_slider_base( ctx, box, 0, 1, value, &t ), mask_using = k_ui_button_holding_inside | k_ui_button_holding_outside | @@ -93,7 +94,7 @@ static bool menu_slider( ui_rect inout_panel, bool select, const char *label, *value = vg_clampf( *value, 0, 1 ); } - menu_decor_select( rect ); + menu_decor_select( ctx, rect ); state |= k_ui_button_hover; } else @@ -101,20 +102,22 @@ static bool menu_slider( ui_rect inout_panel, bool select, const char *label, } ui_rect line = { box[0], box[1], t * (f32)box[2], box[3] }; - ui_fill( line, state&mask_brighter? GUI_COL_ACTIVE: GUI_COL_NORM ); - ui_fill( (ui_rect){ box[0]+line[2], box[1], box[2]-line[2], box[3] }, + ui_fill( ctx, line, state&mask_brighter? GUI_COL_ACTIVE: GUI_COL_NORM ); + ui_fill( ctx, (ui_rect){ box[0]+line[2], box[1], box[2]-line[2], box[3] }, GUI_COL_DARK ); - ui_outline( box, 1, state? GUI_COL_HI: GUI_COL_ACTIVE, 0 ); - ui_slider_text( box, format, disp_min + (*value)*( disp_max-disp_min ) ); + ui_outline( ctx, box, 1, state? GUI_COL_HI: GUI_COL_ACTIVE, 0 ); + ui_slider_text( ctx, box, + format, disp_min + (*value)*( disp_max-disp_min ) ); return (state & mask_using) && 1; } -static bool menu_button( ui_rect inout_panel, bool select, const char *text ) +static bool menu_button( ui_context *ctx, + ui_rect inout_panel, bool select, const char *text ) { ui_rect rect; - menu_standard_widget( inout_panel, rect, 1 ); + menu_standard_widget( ctx, inout_panel, rect, 1 ); enum ui_button_state state = k_ui_button_none; @@ -122,7 +125,7 @@ static bool menu_button( ui_rect inout_panel, bool select, const char *text ) { if( select ) { - menu_decor_select( rect ); + menu_decor_select( ctx, rect ); if( button_down( k_srbind_maccept ) ) state = k_ui_button_click; @@ -130,36 +133,36 @@ static bool menu_button( ui_rect inout_panel, bool select, const char *text ) } else { - state = ui_button_base( rect ); + state = ui_button_base( ctx, rect ); select = 0; } if( state == k_ui_button_click ) { - ui_fill( rect, GUI_COL_DARK ); + ui_fill( ctx, rect, GUI_COL_DARK ); } else if( state == k_ui_button_holding_inside ) { - ui_fill( rect, GUI_COL_DARK ); + ui_fill( ctx, rect, GUI_COL_DARK ); } else if( state == k_ui_button_holding_outside ) { - ui_fill( rect, GUI_COL_DARK ); - ui_outline( rect, 1, GUI_COL_CLICK, 0 ); + ui_fill( ctx, rect, GUI_COL_DARK ); + ui_outline( ctx, rect, 1, GUI_COL_CLICK, 0 ); } else if( state == k_ui_button_hover ) { - ui_fill( rect, GUI_COL_ACTIVE ); - ui_outline( rect, 1, GUI_COL_CLICK, 0 ); + ui_fill( ctx, rect, GUI_COL_ACTIVE ); + ui_outline( ctx, rect, 1, GUI_COL_CLICK, 0 ); } else { - ui_fill( rect, select? GUI_COL_ACTIVE: GUI_COL_NORM ); + ui_fill( ctx, rect, select? GUI_COL_ACTIVE: GUI_COL_NORM ); if( select ) - ui_outline(rect, 1, GUI_COL_HI, 0 ); + ui_outline( ctx, rect, 1, GUI_COL_HI, 0 ); } - ui_text( rect, text, 1, k_ui_align_middle_center, 0 ); + ui_text( ctx, rect, text, 1, k_ui_align_middle_center, 0 ); if( state == k_ui_button_click ) { @@ -171,15 +174,14 @@ static bool menu_button( ui_rect inout_panel, bool select, const char *text ) else return 0; } -static bool menu_checkbox( ui_rect inout_panel, bool select, +static bool menu_checkbox( ui_context *ctx, ui_rect inout_panel, bool select, const char *str_label, i32 *data ) { ui_rect rect, label, box; - menu_standard_widget( inout_panel, rect, 1 ); + menu_standard_widget( ctx, inout_panel, rect, 1 ); ui_split( rect, k_ui_axis_v, -rect[3], 0, label, box ); - ui_text( label, str_label, ui_current_context()->scale, - k_ui_align_middle_left, 0 ); + ui_text( ctx, label, str_label, ctx->scale, k_ui_align_middle_left, 0 ); enum ui_button_state state = k_ui_button_none; @@ -187,7 +189,7 @@ static bool menu_checkbox( ui_rect inout_panel, bool select, { if( select ) { - menu_decor_select( rect ); + menu_decor_select( ctx, rect ); if( button_down( k_srbind_maccept ) ) { @@ -198,35 +200,35 @@ static bool menu_checkbox( ui_rect inout_panel, bool select, } else { - state = ui_checkbox_base( box, data ); + state = ui_checkbox_base( ctx, box, data ); select = 0; } if( state == k_ui_button_holding_inside ) { - ui_fill( box, GUI_COL_ACTIVE ); - ui_outline( box, 1, GUI_COL_CLICK, 0 ); + ui_fill( ctx, box, GUI_COL_ACTIVE ); + ui_outline( ctx, box, 1, GUI_COL_CLICK, 0 ); } else if( state == k_ui_button_holding_outside ) { - ui_fill( box, GUI_COL_DARK ); - ui_outline( box, 1, GUI_COL_CLICK, 0 ); + ui_fill( ctx, box, GUI_COL_DARK ); + ui_outline( ctx, box, 1, GUI_COL_CLICK, 0 ); } else if( state == k_ui_button_hover ) { - ui_fill( box, GUI_COL_ACTIVE ); - ui_outline( box, 1, GUI_COL_HI, 0 ); + ui_fill( ctx, box, GUI_COL_ACTIVE ); + ui_outline( ctx, box, 1, GUI_COL_HI, 0 ); } else { - ui_fill( box, select? GUI_COL_ACTIVE: GUI_COL_DARK ); - ui_outline( box, 1, select? GUI_COL_HI: GUI_COL_NORM, 0 ); + ui_fill( ctx, box, select? GUI_COL_ACTIVE: GUI_COL_DARK ); + ui_outline( ctx, box, 1, select? GUI_COL_HI: GUI_COL_NORM, 0 ); } if( *data ) { ui_rect_pad( box, (ui_px[2]){8,8} ); - ui_fill( box, GUI_COL_HI ); + ui_fill( ctx, box, GUI_COL_HI ); } if( state == k_ui_button_click ) @@ -239,10 +241,11 @@ static bool menu_checkbox( ui_rect inout_panel, bool select, else return 0; } -static void menu_heading( ui_rect inout_panel, const char *label, u32 colour ) +static void menu_heading( ui_context *ctx, + ui_rect inout_panel, const char *label, u32 colour ) { ui_rect rect; - menu_standard_widget( inout_panel, rect, 1 ); + menu_standard_widget( ctx, inout_panel, rect, 1 ); rect[0] -= 8; rect[2] += 16; @@ -250,25 +253,25 @@ static void menu_heading( ui_rect inout_panel, const char *label, u32 colour ) u32 c0 = ui_opacity( GUI_COL_DARK, 0.36f ), c1 = ui_opacity( GUI_COL_DARK, 0.5f ); - struct ui_vert *vs = ui_fill( rect, c0 ); + struct ui_vert *vs = ui_fill( ctx, rect, c0 ); vs[0].colour = c1; vs[1].colour = c1; rect[1] += 4; - ui_text( rect, label, 1, k_ui_align_middle_center, 1 ); + ui_text( ctx, rect, label, 1, k_ui_align_middle_center, 1 ); rect[0] += 1; rect[1] -= 1; - ui_text( rect, label, 1, k_ui_align_middle_center, colour? colour: - ui_colour(k_ui_blue+k_ui_brighter) ); + ui_text( ctx, rect, label, 1, k_ui_align_middle_center, colour? colour: + ui_colour(ctx, k_ui_blue+k_ui_brighter) ); } -static u32 medal_colour( u32 flags ) +static u32 medal_colour( ui_context *ctx, u32 flags ) { if( flags & k_ent_route_flag_achieve_gold ) - return ui_colour( k_ui_yellow ); + return ui_colour( ctx, k_ui_yellow ); else if( flags & k_ent_route_flag_achieve_silver ) - return ui_colour( k_ui_fg ); + return ui_colour( ctx, k_ui_fg ); else return 0; } @@ -316,7 +319,7 @@ static void menu_link_modal( const char *url ) menu.web_choice = 0; } -void menu_gui(void) +void menu_gui( ui_context *ctx ) { if( button_down( k_srbind_mopen ) ) { @@ -371,7 +374,7 @@ void menu_gui(void) if( vg_input.display_input_method == k_input_method_kbm ) { - ui_capture_mouse(1); + ui_capture_mouse(ctx, 1); } if( skaterift.activity != k_skaterift_menu ) return; @@ -384,18 +387,18 @@ void menu_gui(void) ui_rect panel = { 0,0, 800, 200 }, screen = { 0,0, vg.window_x,vg.window_y }; ui_rect_center( screen, panel ); - ui_fill( panel, GUI_COL_DARK ); - ui_outline( panel, 1, GUI_COL_NORM, 0 ); + ui_fill( ctx, panel, GUI_COL_DARK ); + ui_outline( ctx, panel, 1, GUI_COL_NORM, 0 ); ui_rect_pad( panel, (ui_px[]){8,8} ); ui_rect title; ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); - ui_font_face( &vgf_default_title ); - ui_text( title, "Open Link?", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_title; + ui_text( ctx, title, "Open Link?", 1, k_ui_align_middle_center, 0 ); ui_split( panel, k_ui_axis_h, 28, 0, title, panel ); - ui_font_face( &vgf_default_large ); - ui_text( title, menu.web_link, 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_large; + ui_text( ctx, title, menu.web_link, 1, k_ui_align_middle_center, 0 ); ui_rect end = { panel[0], panel[1] + panel[3] - 48, panel[2], 48 }; @@ -405,7 +408,7 @@ void menu_gui(void) i32 R = menu_nav( &menu.web_choice, mh, 2 ); - if( menu_button( a, R==0, "Steam Overlay" ) ) + if( menu_button( ctx, a, R==0, "Steam Overlay" ) ) { if( steam_ready ) { @@ -417,7 +420,7 @@ void menu_gui(void) } } - if( menu_button( b, R==1, "Web Browser" ) ) + if( menu_button( ctx, b, R==1, "Web Browser" ) ) { char buf[512]; vg_str str; @@ -435,7 +438,7 @@ void menu_gui(void) menu.web_link = NULL; } - if( menu_button( c, R==2, "No" ) || button_down( k_srbind_mback ) ) + if( menu_button( ctx, c, R==2, "No" ) || button_down( k_srbind_mback ) ) { audio_lock(); audio_oneshot( &audio_ui[3], 1.0f, 0.0f ); @@ -466,27 +469,29 @@ void menu_gui(void) ui_rect panel = { 0,0, 600, 400 }, screen = { 0,0, vg.window_x,vg.window_y }; ui_rect_center( screen, panel ); - ui_fill( panel, GUI_COL_DARK ); - ui_outline( panel, 1, GUI_COL_NORM, 0 ); + ui_fill( ctx, panel, GUI_COL_DARK ); + ui_outline( ctx, panel, 1, GUI_COL_NORM, 0 ); ui_rect_pad( panel, (ui_px[]){8,8} ); ui_rect title; ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); - ui_font_face( &vgf_default_title ); - ui_text( title, "Skate Rift - Credits", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_title; + ui_text( ctx, title, "Skate Rift - Credits", + 1, k_ui_align_middle_center, 0 ); ui_split( panel, k_ui_axis_h, 28, 0, title, panel ); - ui_font_face( &vgf_default_large ); - ui_text( title, "Mt.Zero Software", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_large; + ui_text( ctx, title, + "Mt.Zero Software", 1, k_ui_align_middle_center, 0 ); ui_split( panel, k_ui_axis_h, 8, 0, title, panel ); ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); - ui_font_face( &vgf_default_title ); - ui_text( title, "Free Software", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_title; + ui_text( ctx, title, "Free Software", 1, k_ui_align_middle_center, 0 ); ui_split( panel, k_ui_axis_h, 8, 0, title, panel ); - ui_font_face( &vgf_default_large ); - ui_text( panel, + ctx->font = &vgf_default_large; + ui_text( ctx, panel, "Sam Lantinga - SDL2 - libsdl.org\n" "Hunter WB - Anyascii\n" "David Herberth - GLAD\n" @@ -498,7 +503,7 @@ void menu_gui(void) ui_rect end = { panel[0], panel[1] + panel[3] - 64, panel[2], 64 }; - if( menu_button( end, 1, "Back" ) || button_down( k_srbind_mback ) ) + if( menu_button( ctx, end, 1, "Back" ) || button_down( k_srbind_mback ) ) { menu.page = k_menu_page_main; } @@ -511,27 +516,29 @@ void menu_gui(void) ui_rect panel = { 0,0, 600, 400 }, screen = { 0,0, vg.window_x,vg.window_y }; ui_rect_center( screen, panel ); - ui_fill( panel, ui_opacity( GUI_COL_DARK, 0.35f ) ); - ui_outline( panel, 1, GUI_COL_NORM, 0 ); + ui_fill( ctx, panel, ui_opacity( GUI_COL_DARK, 0.35f ) ); + ui_outline( ctx, panel, 1, GUI_COL_NORM, 0 ); ui_rect_pad( panel, (ui_px[]){8,8} ); ui_rect title; ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); - ui_font_face( &vgf_default_title ); - ui_text( title, "Welcome to Skate Rift", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_title; + ui_text( ctx, title, + "Welcome to Skate Rift", 1, k_ui_align_middle_center, 0 ); ui_split( panel, k_ui_axis_h, 28, 0, title, panel ); - ui_font_face( &vgf_default_large ); + ctx->font = &vgf_default_large; - menu_checkbox( panel, R == 0, + menu_checkbox( ctx, panel, R == 0, "Show controls overlay (good for new players)", &control_overlay.enabled ); - menu_checkbox( panel, R == 1, "Auto connect to global server", + menu_checkbox( ctx, panel, R == 1, "Auto connect to global server", &network_client.auto_connect ); ui_rect end = { panel[0], panel[1] + panel[3] - 100, panel[2], 100 }; - menu_checkbox( end, R == 2, "Don't show this again", &menu.skip_starter ); - if( menu_button( end, R == 3, "OK" ) ) + menu_checkbox( ctx, end, R == 2, + "Don't show this again", &menu.skip_starter ); + if( menu_button( ctx, end, R == 3, "OK" ) ) { menu.page = k_menu_page_main; skaterift.activity = k_skaterift_default; @@ -546,34 +553,34 @@ void menu_gui(void) ui_rect panel = { 0,0, 600, 400+240 }, screen = { 0,0, vg.window_x,vg.window_y }; ui_rect_center( screen, panel ); - ui_fill( panel, ui_opacity( GUI_COL_DARK, 0.35f ) ); - ui_outline( panel, 1, GUI_COL_NORM, 0 ); + ui_fill( ctx, panel, ui_opacity( GUI_COL_DARK, 0.35f ) ); + ui_outline( ctx, panel, 1, GUI_COL_NORM, 0 ); ui_rect_pad( panel, (ui_px[]){8,8} ); ui_rect title; ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); - ui_font_face( &vgf_default_title ); - ui_text( title, "Content is in the full game.", + ctx->font = &vgf_default_title; + ui_text( ctx, title, "Content is in the full game.", 1, k_ui_align_middle_center, 0 ); ui_split( panel, k_ui_axis_h, 28, 0, title, panel ); - ui_font_face( &vgf_default_large ); + ctx->font = &vgf_default_large; ui_rect img; ui_split( panel, k_ui_axis_h, 456, 0, img, panel ); - ui_image( img, menu.prem_tex ); + ui_image( ctx, img, &menu.prem_tex ); ui_rect end = { panel[0], panel[1] + panel[3] - 48, panel[2], 48 }, a,b; ui_split_ratio( end, k_ui_axis_v, 0.5f, 2, a, b ); - if( menu_button( a, R == 0, "Store Page" ) ) + if( menu_button( ctx, a, R == 0, "Store Page" ) ) { if( steam_ready ) SteamAPI_ISteamFriends_ActivateGameOverlayToStore( SteamAPI_SteamFriends(), 2103940, k_EOverlayToStoreFlag_None); } - if( menu_button( b, R == 1, "Nah" ) || button_down( k_srbind_mback ) ) + if( menu_button( ctx, b, R == 1, "Nah" ) || button_down( k_srbind_mback ) ) { audio_lock(); audio_oneshot( &audio_ui[3], 1.0f, 0.0f ); @@ -588,8 +595,8 @@ void menu_gui(void) /* TOP BAR * -------------------------------------------------------------------*/ - ui_font_face( &vgf_default_title ); - ui_px height = ui_current_context()->font->ch + 16; + ctx->font = &vgf_default_title; + ui_px height = ctx->font->ch + 16; ui_rect topbar = { 0, 0, vg.window_x, height }; const char *opts[] = { @@ -622,42 +629,43 @@ void menu_gui(void) if( draw ) { ui_rect inf_lb = { x, 0, 32, height }; - ui_fill( inf_lb, lb_down? GUI_COL_NORM: GUI_COL_NORM ); - ui_text( inf_lb, "\x91", 1, k_ui_align_middle_center, 0 ); + ui_fill( ctx, inf_lb, lb_down? GUI_COL_NORM: GUI_COL_NORM ); + ui_text( ctx, inf_lb, "\x91", 1, k_ui_align_middle_center, 0 ); } x += 32 + spacer; } for( i32 i=0; ifont = &vgf_default_large; + ui_rect title = { vg.window_x/2- 512/2, height+8, 512, 64 }; ui_px x = 8, y = height+8; struct ui_vert *vs = - ui_fill( (ui_rect){ x,y, 0,height }, + ui_fill( ctx, (ui_rect){ x,y, 0,height }, world_static.active_instance? GUI_COL_DARK: GUI_COL_ACTIVE ); char buf[64]; @@ -710,9 +720,9 @@ void menu_gui(void) vg_strcat( &str, "\x1B[0m)" ); } - ui_px w = ui_text( (ui_rect){ x+8, y, 1000, height }, buf, 1, + ui_px w = ui_text( ctx, (ui_rect){ x+8, y, 1000, height }, buf, 1, k_ui_align_middle_left, 0 ); - w *= ui_current_context()->font->sx; + w *= ctx->font->sx; x += w + 16; vs[1].co[0] = x + 8; @@ -739,16 +749,16 @@ void menu_gui(void) vg_strcat( &str, "\x1B[0m)" ); } - vs = ui_fill( (ui_rect){ x,y, 1000,height }, + vs = ui_fill( ctx, (ui_rect){ x,y, 1000,height }, world_static.active_instance? GUI_COL_ACTIVE: GUI_COL_DARK ); - w = ui_text( (ui_rect){ x+16,y, 1000,height }, buf, + w = ui_text( ctx, (ui_rect){ x+16,y, 1000,height }, buf, 1, k_ui_align_middle_left, 0 ); - w = w*ui_current_context()->font->sx + 8*3; + w = w*ctx->font->sx + 8*3; x += w; if( button_down( k_srbind_mhub ) || - ui_button_base( (ui_rect){0,y,x,height} ) == k_ui_button_click ) + ui_button_base( ctx, (ui_rect){0,y,x,height} ) == k_ui_button_click ) { world_switch_instance( world_static.active_instance ^ 0x1 ); skaterift.activity = k_skaterift_default; @@ -767,7 +777,7 @@ void menu_gui(void) { ui_rect stat_panel = { x,y, 256,vg.window_y-y }; u32 c0 = ui_opacity( GUI_COL_DARK, 0.36f ); - struct ui_vert *vs = ui_fill( stat_panel, c0 ); + struct ui_vert *vs = ui_fill( ctx, stat_panel, c0 ); ui_rect_pad( stat_panel, (ui_px[2]){8,0} ); @@ -779,14 +789,14 @@ void menu_gui(void) continue; const char *title = mdl_pstr( &world->meta, region->pstr_title ); - ui_font_face( &vgf_default_large ); + ctx->font = &vgf_default_large; ui_rect title_box; - menu_standard_widget( stat_panel, title_box, 1 ); + menu_standard_widget( ctx, stat_panel, title_box, 1 ); stat_panel[0] += 16; stat_panel[2] -= 16; - ui_font_face( &vgf_default_small ); + ctx->font = &vgf_default_small; ent_volume *volume = mdl_arritm(&world->ent_volume, mdl_entity_id_id(region->zone_volume)); @@ -822,9 +832,9 @@ void menu_gui(void) vg_strcat( &str, "\xb3"); ui_rect r; - ui_standard_widget( stat_panel, r, 1 ); - ui_text( r, buf, 1, k_ui_align_middle_left, - medal_colour(route->flags) ); + ui_standard_widget( ctx, stat_panel, r, 1 ); + ui_text( ctx, r, buf, 1, k_ui_align_middle_left, + medal_colour( ctx, route->flags ) ); } for( u32 j=0; jent_challenge); j ++ ) @@ -854,8 +864,9 @@ void menu_gui(void) combined &= flags; ui_rect r; - ui_standard_widget( stat_panel, r, 1 ); - ui_text( r, buf, 1, k_ui_align_middle_left, medal_colour(flags) ); + ui_standard_widget( ctx, stat_panel, r, 1 ); + ui_text( ctx, r, buf, 1, + k_ui_align_middle_left, medal_colour( ctx, flags ) ); } stat_panel[0] -= 16; @@ -863,11 +874,11 @@ void menu_gui(void) u32 title_col = 0; if( combined & k_ent_route_flag_achieve_gold ) - title_col = ui_colour( k_ui_yellow ); + title_col = ui_colour( ctx, k_ui_yellow ); else if( combined & k_ent_route_flag_achieve_silver ) - title_col = ui_colour( k_ui_fg ); + title_col = ui_colour( ctx, k_ui_fg ); - menu_heading( title_box, title, title_col ); + menu_heading( ctx, title_box, title, title_col ); } vs[2].co[1] = stat_panel[1]; @@ -897,57 +908,57 @@ void menu_gui(void) { i32 R = menu_nav( &menu.main_row, mv, 2 ); - if( menu_button( list, R == 0, "Resume" ) ) + if( menu_button( ctx, list, R == 0, "Resume" ) ) { skaterift.activity = k_skaterift_default; return; } - if( menu_button( list, R == 1, "Credits" ) ) + if( menu_button( ctx, list, R == 1, "Credits" ) ) { menu.page = k_menu_page_credits; } ui_rect end = { list[0], list[1]+list[3]-64, list[2], 72 }; - if( menu_button( end, R == 2, "Quit Game" ) ) + if( menu_button( ctx, end, R == 2, "Quit Game" ) ) { vg.window_should_close = 1; } } else if( menu.main_index == k_menu_main_settings ) { - ui_fill( list0, ui_opacity( GUI_COL_DARK, 0.36f ) ); - ui_outline( list0, 1, GUI_COL_NORM, 0 ); + ui_fill( ctx, list0, ui_opacity( GUI_COL_DARK, 0.36f ) ); + ui_outline( ctx, list0, 1, GUI_COL_NORM, 0 ); i32 R = menu_nav( &menu.settings_row, mv, 8 ); - ui_font_face( &vgf_default_large ); + ctx->font = &vgf_default_large; list[1] -= 8; - menu_heading( list, "Game", 0 ); - menu_checkbox( list, R == 0, "Show controls overlay", + menu_heading( ctx, list, "Game", 0 ); + menu_checkbox( ctx, list, R == 0, "Show controls overlay", &control_overlay.enabled ); - menu_checkbox( list, R == 1, "Auto connect to global server", + menu_checkbox( ctx, list, R == 1, "Auto connect to global server", &network_client.auto_connect ); - menu_heading( list, "Audio/Video", 0 ); - menu_slider( list, R == 2, "Volume", 0, 100, + menu_heading( ctx, list, "Audio/Video", 0 ); + menu_slider( ctx, list, R == 2, "Volume", 0, 100, &vg_audio.external_global_volume, "%.f%%" ); - menu_slider( list, R == 3, "Resolution", 0, 100, + menu_slider( ctx, list, R == 3, "Resolution", 0, 100, &k_render_scale, "%.f%%" ); - menu_checkbox( list, R == 4, "Motion Blur", &k_blur_effect ); + menu_checkbox( ctx, list, R == 4, "Motion Blur", &k_blur_effect ); - menu_heading( list, "Camera", 0 ); - menu_slider( list, R == 5, "Fov", 97, 135, + menu_heading( ctx, list, "Camera", 0 ); + menu_slider( ctx, list, R == 5, "Fov", 97, 135, &k_fov, "%.1f\xb0" ); - menu_slider( list, R == 6, "Cam Height", -0.4f, +1.4f, + menu_slider( ctx, list, R == 6, "Cam Height", -0.4f, +1.4f, &k_cam_height, vg_lerpf(-0.4f,1.4f,k_cam_height)>=0.0f? "+%.2fm": "%.2fm" ); - menu_checkbox( list, R == 7, "Invert Y Axis", &k_invert_y ); + menu_checkbox( ctx, list, R == 7, "Invert Y Axis", &k_invert_y ); ui_rect end = { list[0], list[1]+list[3]-64, list[2], 72 }; - ui_font_face( &vgf_default_small ); - menu_heading( end, "Advanced", 0 ); - if( menu_button( end, R == 8, "Open Engine Settings" ) ) + ctx->font = &vgf_default_small; + menu_heading( ctx, end, "Advanced", 0 ); + if( menu_button( ctx, end, R == 8, "Open Engine Settings" ) ) { vg_settings_open(); } @@ -967,29 +978,30 @@ void menu_gui(void) if( menu.guide_sel && (menu.guide_sel <= 3) ) { - vs = ui_fill( inf, ui_opacity( GUI_COL_DARK, 0.20f ) ); + vs = ui_fill( ctx, inf, ui_opacity( GUI_COL_DARK, 0.20f ) ); ui_rect_pad( inf, (ui_px[]){8,8} ); } - ui_fill( list0, ui_opacity( GUI_COL_DARK, 0.36f ) ); - ui_outline( list0, 1, GUI_COL_NORM, 0 ); + ui_fill( ctx, list0, ui_opacity( GUI_COL_DARK, 0.36f ) ); + ui_outline( ctx, list0, 1, GUI_COL_NORM, 0 ); i32 R = menu_nav( &menu.guides_row, mv, 6 ); - ui_font_face( &vgf_default_large ); + ctx->font = &vgf_default_large; list[1] -= 8; - menu_heading( list, "Info", 0 ); + menu_heading( ctx, list, "Info", 0 ); if( menu.guide_sel == 1 ) { menu_try_find_cam( 1 ); ui_rect title; ui_split( inf, k_ui_axis_h, 28*2, 0, title, inf ); - ui_font_face( &vgf_default_title ); - ui_text( title, "Where to go", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_title; + ui_text( ctx, + title, "Where to go", 1, k_ui_align_middle_center, 0 ); ui_split( inf, k_ui_axis_h, 28, 0, title, inf ); - ui_font_face( &vgf_default_large ); - ui_text( inf, + ctx->font = &vgf_default_large; + ui_text( ctx, inf, "Visit the sandcastles built by John Cockroach to be\n" "transported into the real location. Use the map in the\n" "menu to return back this hub island.\n" @@ -1006,7 +1018,8 @@ void menu_gui(void) vs[2].co[1] = vs[0].co[1] + 84 + vgf_default_large.sy*11 + 16; vs[3].co[1] = vs[2].co[1]; } - if( menu_button( list, R == 0, "Where to go" ) ) menu.guide_sel = 1; + if( menu_button( ctx, list, R == 0, "Where to go" ) ) + menu.guide_sel = 1; if( menu.guide_sel == 3 ) { @@ -1014,12 +1027,12 @@ void menu_gui(void) ui_rect title; ui_split( inf, k_ui_axis_h, 28*2, 0, title, inf ); - ui_font_face( &vgf_default_title ); - ui_text( title, "Online", 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_title; + ui_text( ctx, title, "Online", 1, k_ui_align_middle_center, 0 ); ui_split( inf, k_ui_axis_h, 28, 0, title, inf ); - ui_font_face( &vgf_default_large ); - ui_text( inf, + ctx->font = &vgf_default_large; + ui_text( ctx, inf, "Connection to the global server is managed by this radar\n" "dish in the hub island. Come back here to turn the\n" "connection on or off.\n" @@ -1032,10 +1045,11 @@ void menu_gui(void) vs[2].co[1] = vs[0].co[1] + 84 + vgf_default_large.sy*7 + 16; vs[3].co[1] = vs[2].co[1]; } - if( menu_button( list, R == 1, "Playing Online" ) ) menu.guide_sel = 3; + if( menu_button( ctx, list, R == 1, "Playing Online" ) ) + menu.guide_sel = 3; - menu_heading( list, "Controls", 0 ); - if( menu_button( list, R == 2, "Skating \xb2" ) ) + menu_heading( ctx, list, "Controls", 0 ); + if( menu_button( ctx, list, R == 2, "Skating \xb2" ) ) { menu.guide_sel = 0; menu_link_modal( @@ -1043,27 +1057,27 @@ void menu_gui(void) } if( menu.guide_sel == 0 || menu.guide_sel > 3 ) menu_try_find_cam( 3 ); - if( menu_button( list, R == 3, "Tricks \xb2" ) ) + if( menu_button( ctx, list, R == 3, "Tricks \xb2" ) ) { menu.guide_sel = 0; menu_link_modal( "https://skaterift.com/index.php?page=tricks" ); } - menu_heading( list, "Workshop", 0 ); - if( menu_button( list, R == 4, "Create a Board \xb2" ) ) + menu_heading( ctx, list, "Workshop", 0 ); + if( menu_button( ctx, list, R == 4, "Create a Board \xb2" ) ) { menu.guide_sel = 0; menu_link_modal( "https://skaterift.com/index.php?page=workshop_board" ); } - if( menu_button( list, R == 5, "Create a World \xb2" ) ) + if( menu_button( ctx, list, R == 5, "Create a World \xb2" ) ) { menu.guide_sel = 0; menu_link_modal( "https://skaterift.com/index.php?page=workshop_world" ); } - if( menu_button( list, R == 6, "Create a Playermodel \xb2" ) ) + if( menu_button( ctx, list, R == 6, "Create a Playermodel \xb2" ) ) { menu.guide_sel = 0; menu_link_modal( @@ -1074,9 +1088,8 @@ void menu_gui(void) menu_draw: - g_ui_ctx->frosting = 0.015f; - ui_flush( k_ui_shader_colour ); - g_ui_ctx->frosting = 0.0f; - - ui_font_face( &vgf_default_small ); + vg_ui.frosting = 0.015f; + ui_flush( ctx, k_ui_shader_colour, NULL ); + vg_ui.frosting = 0.0f; + ctx->font = &vgf_default_small; } diff --git a/menu.h b/menu.h index 47d3be6..5a6dbc4 100644 --- a/menu.h +++ b/menu.h @@ -51,6 +51,6 @@ extern menu; void menu_init(void); void menu_at_begin(void); -void menu_gui(void); +void menu_gui( ui_context *ctx ); void menu_open( enum menu_page page ); bool menu_viewing_map(void); diff --git a/network.c b/network.c index 381a908..27048fb 100644 --- a/network.c +++ b/network.c @@ -374,13 +374,14 @@ void render_server_status_gui(void) { render_fb_bind( gpipeline.fb_workshop_preview, 0 ); - ui_set_screen( 128, 48 ); + vg_ui_set_screen( 128, 48 ); + ui_context *ctx = &vg_ui.ctx; /* HACK */ - g_ui_ctx->cur_vert = 0; - g_ui_ctx->cur_indice = 0; - g_ui_ctx->vert_start = 0; - g_ui_ctx->indice_start = 0; + ctx->cur_vert = 0; + ctx->cur_indice = 0; + ctx->vert_start = 0; + ctx->indice_start = 0; ui_rect r = { 0, 0, 128, 48 }; @@ -391,9 +392,9 @@ void render_server_status_gui(void) u32 bg = 0xff000000; network_status_string( &str, &bg ); - ui_fill( r, bg ); - ui_text( r, buf, 1, k_ui_align_center, 0 ); - ui_flush( k_ui_shader_colour ); + ui_fill( ctx, r, bg ); + ui_text( ctx, r, buf, 1, k_ui_align_center, 0 ); + ui_flush( ctx, k_ui_shader_colour, NULL ); skaterift.rt_textures[ k_skaterift_rt_server_status ] = gpipeline.fb_workshop_preview->attachments[0].id; diff --git a/player.c b/player.c index 9ac4849..b200a78 100644 --- a/player.c +++ b/player.c @@ -91,7 +91,7 @@ void player_init(void) k_var_dtype_i32, VG_VAR_PERSISTENT ); } -void player__debugtext( int size, const char *fmt, ... ) +void player__debugtext( ui_context *ctx, int size, const char *fmt, ... ) { char buffer[ 1024 ]; @@ -100,7 +100,7 @@ void player__debugtext( int size, const char *fmt, ... ) vsnprintf( buffer, 1024, fmt, args ); va_end( args ); - ui_text( g_player_debugger, buffer, size, k_ui_align_left, 0 ); + ui_text( ctx, g_player_debugger, buffer, size, k_ui_align_left, 0 ); g_player_debugger[1] += size*16; } @@ -234,7 +234,7 @@ void player_apply_transport_to_cam( m4x3f transport ) m4x4_mul( world_gates.cam.mtx.v, transport_4, world_gates.cam.mtx.v ); } -void player__im_gui(void) +void player__im_gui( ui_context *ctx ) { if( !k_player_debug_info ) return; @@ -245,41 +245,42 @@ void player__im_gui(void) vg.window_y }; - ui_fill( box, (ui_colour(k_ui_bg)&0x00ffffff)|0x50000000 ); + ui_fill( ctx, box, (ui_colour(ctx, k_ui_bg)&0x00ffffff)|0x50000000 ); g_player_debugger[0] = box[0]; g_player_debugger[1] = 0; g_player_debugger[2] = 300; g_player_debugger[3] = 32; - player__debugtext( 2, "instance #%u", world_static.active_instance ); + player__debugtext( ctx, 2, "instance #%u", world_static.active_instance ); char buf[96]; - for( u32 i=0; ialias, buf ); else strcpy( buf, "none" ); - player__debugtext( 1, "world #%u: %s", i, buf ); + player__debugtext( ctx, 1, "world #%u: %s", i, buf ); } - player__debugtext( 2, "director" ); - player__debugtext( 1, "activity: %s", + player__debugtext( ctx, 2, "director" ); + player__debugtext( ctx, 1, "activity: %s", (const char *[]){ [k_skaterift_menu] = "menu", [k_skaterift_replay] = "replay", [k_skaterift_ent_focus] = "ent_focus", [k_skaterift_default] = "default", } [skaterift.activity] ); - player__debugtext( 1, "time_rate: %.4f", skaterift.time_rate ); + player__debugtext( ctx, 1, "time_rate: %.4f", skaterift.time_rate ); - player__debugtext( 2, "player" ); - player__debugtext( 1, "angles: " PRINTF_v3f( localplayer.cam.angles ) ); + player__debugtext( ctx, 2, "player" ); + player__debugtext( ctx, 1, "angles: " PRINTF_v3f( localplayer.cam.angles ) ); if( player_subsystems[ localplayer.subsystem ]->im_gui ) - player_subsystems[ localplayer.subsystem ]->im_gui(); + player_subsystems[ localplayer.subsystem ]->im_gui( ctx ); - skaterift_replay_debug_info(); + skaterift_replay_debug_info( ctx ); } void player__setpos( v3f pos ) diff --git a/player.h b/player.h index ea4ef46..ff8c2e1 100644 --- a/player.h +++ b/player.h @@ -28,13 +28,14 @@ struct player_cam_controller { #include "player_model.h" #include "player_render.h" -struct player_subsystem_interface{ +struct player_subsystem_interface +{ void(*system_register)(void); void(*bind)(void); void(*pre_update)(void); void(*update)(void); void(*post_update)(void); - void(*im_gui)(void); + void(*im_gui)( ui_context *ctx ); void(*animate)(void); void(*pose)( void *animator, player_pose *pose ); void(*effects)( void *animator, m4x3f *final_mtx, struct player_board *board, @@ -168,7 +169,7 @@ extern struct player_subsystem_interface *player_subsystems[]; */ void player_init(void); -void player__debugtext( int size, const char *fmt, ... ); +void player__debugtext( ui_context *ctx, int size, const char *fmt, ... ); void player__use_mesh( glmesh *mesh ); void player__use_model( u16 reg_id ); @@ -178,7 +179,7 @@ void player__update(void); void player__post_update(void); void player__pass_gate( u32 id ); -void player__im_gui(void); +void player__im_gui( ui_context *ctx ); void player__setpos( v3f pos ); void player__spawn( ent_spawn *rp ); void player__clean_refs(void); diff --git a/player_common.c b/player_common.c index 9a03e19..1ecbae9 100644 --- a/player_common.c +++ b/player_common.c @@ -269,7 +269,7 @@ void player__cam_iterate(void) void player_look( v3f angles, float speed ) { - if( g_ui_ctx->wants_mouse ) return; + if( vg_ui.ctx.wants_mouse ) return; angles[2] = 0.0f; diff --git a/player_dead.c b/player_dead.c index 72eba26..43b6211 100644 --- a/player_dead.c +++ b/player_dead.c @@ -155,7 +155,7 @@ void player__dead_post_animate(void) localplayer.cam_velocity_influence = 1.0f; } -void player__dead_im_gui(void) +void player__dead_im_gui( ui_context *ctx ) { } diff --git a/player_dead.h b/player_dead.h index 94241b9..93b0cc3 100644 --- a/player_dead.h +++ b/player_dead.h @@ -25,7 +25,7 @@ void player__dead_post_update (void); void player__dead_animate (void); void player__dead_pose (void *animator, player_pose *pose); void player__dead_post_animate(void); -void player__dead_im_gui (void); +void player__dead_im_gui ( ui_context *ctx ); void player__dead_bind (void); void player__dead_transition ( enum player_die_type type ); void player__dead_animator_exchange( bitpack_ctx *ctx, void *data ); diff --git a/player_drive.c b/player_drive.c index 230e7bd..0462037 100644 --- a/player_drive.c +++ b/player_drive.c @@ -74,9 +74,9 @@ void player__drive_post_animate(void) localplayer.angles[1] = pitch; } -void player__drive_im_gui(void) +void player__drive_im_gui( ui_context *ctx ) { - player__debugtext( 1, "Nothing here" ); + player__debugtext( ctx, 1, "Nothing here" ); } void player__drive_bind(void) diff --git a/player_drive.h b/player_drive.h index 76c2557..9a5649d 100644 --- a/player_drive.h +++ b/player_drive.h @@ -17,5 +17,5 @@ void player__drive_animate(void); void player__drive_pose( void *animator, player_pose *pose ); void player__drive_post_animate(void); -void player__drive_im_gui(void); +void player__drive_im_gui( ui_context *ctx ); void player__drive_bind(void); diff --git a/player_glide.c b/player_glide.c index 6b5930b..5df05e3 100644 --- a/player_glide.c +++ b/player_glide.c @@ -347,18 +347,17 @@ void player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ) bitpack_qquat( ctx, animator->root_q ); } -void player_glide_im_gui(void) +void player_glide_im_gui( ui_context *ctx ) { - player__debugtext( 1, "Nothing here" ); - player__debugtext( 1, " lift: %.2f %.2f %.2f", + player__debugtext( ctx, 1, " lift: %.2f %.2f %.2f", player_glide.info_lift[0], player_glide.info_lift[1], player_glide.info_lift[2] ); - player__debugtext( 1, " slip: %.2f %.2f %.2f", + player__debugtext( ctx, 1, " slip: %.2f %.2f %.2f", player_glide.info_slip[0], player_glide.info_slip[1], player_glide.info_slip[2] ); - player__debugtext( 1, " drag: %.2f %.2f %.2f", + player__debugtext( ctx, 1, " drag: %.2f %.2f %.2f", player_glide.info_drag[0], player_glide.info_drag[1], player_glide.info_drag[2] ); diff --git a/player_glide.h b/player_glide.h index cbb1fb5..03c8260 100644 --- a/player_glide.h +++ b/player_glide.h @@ -62,7 +62,7 @@ void player_glide_animate(void); void player_glide_pose( void *animator, player_pose *pose ); void player_glide_post_animate(void); -void player_glide_im_gui(void); +void player_glide_im_gui( ui_context *ctx ); void player_glide_bind(void); void player_glide_transition(void); bool glider_physics( v2f steer ); diff --git a/player_remote.c b/player_remote.c index 592a424..44d28b2 100644 --- a/player_remote.c +++ b/player_remote.c @@ -420,9 +420,10 @@ void remote_player_debug_update(void) /* * Debugging information */ -void remote_player_network_imgui( m4x4f pv ) +void remote_player_network_imgui( ui_context *ctx, m4x4f pv ) { - if( network_client.user_intent == k_server_intent_online ){ + if( network_client.user_intent == k_server_intent_online ) + { if( !(steam_ready && (network_client.state == k_ESteamNetworkingConnectionState_Connected))) { @@ -431,7 +432,7 @@ void remote_player_network_imgui( m4x4f pv ) vg_strnull( &str, buf, sizeof(buf) ); u32 fg = 0; network_status_string( &str, &fg ); - ui_text( (ui_rect){ vg.window_x - 200, 0, 200, 48 }, buf, 1, + ui_text( ctx, (ui_rect){ vg.window_x - 200, 0, 200, 48 }, buf, 1, k_ui_align_middle_center, fg ); } } @@ -440,13 +441,13 @@ void remote_player_network_imgui( m4x4f pv ) return; ui_rect panel = { (vg.window_x / 2) - 200, 0, 400, 600 }; - ui_fill( panel, (ui_colour(k_ui_bg)&0x00ffffff)|0x50000000 ); + ui_fill( ctx, panel, (ui_colour(ctx, k_ui_bg)&0x00ffffff)|0x50000000 ); - ui_font_face( &vgf_default_title ); - ui_info( panel, "Network" ); - ui_font_face( &vgf_default_large ); - ui_info( panel, "Status" ); - ui_font_face( &vgf_default_small ); + ctx->font = &vgf_default_title; + ui_info( ctx, panel, "Network" ); + ctx->font = &vgf_default_large; + ui_info( ctx, panel, "Status" ); + ctx->font = &vgf_default_small; char buf[512]; const char *netstatus = "PROGRAMMING ERROR"; @@ -469,39 +470,46 @@ void remote_player_network_imgui( m4x4f pv ) { k_ESteamNetworkingConnectionState_Linger, "Linger" }, { k_ESteamNetworkingConnectionState_Dead, "Dead" } }; - for( u32 i=0; iactive ){ + if( player->active ) + { const char *sysname = "invalid"; - if( player->subsystem < k_player_subsystem_max ){ + if( player->subsystem < k_player_subsystem_max ) + { sysname = player_subsystems[ player->subsystem ]->name; } snprintf( buf, 512, "#%u: %s [%s] D%.1fkbs", i, player->username, sysname, player->down_kbs ); - ui_info( panel, buf ); + ui_info( ctx, panel, buf ); } } } - else { - ui_info( panel, "offline" ); + else + { + ui_info( ctx, panel, "offline" ); } } @@ -865,39 +873,39 @@ static int player_tag_position( m4x4f pv, v3f root_co, ui_point out_point ){ /* * Draw chat box relative to the root tag position on the screen */ -static void chat_box( ui_point tag_root, f64 time, const char *message ) +static void chat_box( ui_context *ctx, + ui_point tag_root, f64 time, const char *message ) { if( (vg.time_real - time) > 15.0 ) return; ui_rect wr; - wr[2] = ui_text_line_width( message ) + 8; - wr[3] = g_ui_ctx->font->ch + 2; + wr[2] = ui_text_line_width( ctx, message ) + 8; + wr[3] = ctx->font->ch + 2; wr[0] = tag_root[0]-(wr[2]/2); wr[1] = tag_root[1] - wr[3] - 8; - ui_fill( wr, ui_opacity( ui_colour(k_ui_bg), 0.23f ) ); - ui_text( wr, message, 1, k_ui_align_middle_center, 0 ); + ui_fill( ctx, wr, ui_opacity( ui_colour(ctx, k_ui_bg), 0.23f ) ); + ui_text( ctx, wr, message, 1, k_ui_align_middle_center, 0 ); } /* * Draw full imgui for remote player */ -static void remote_player_nametag( ui_point tag_root, +static void remote_player_nametag( ui_context *ctx, ui_point tag_root, struct network_player *player ) { - ui_font_face( &vgf_default_large ); + ctx->font = &vgf_default_large; ui_rect wr; - wr[2] = VG_MAX( ui_text_line_width( player->username ), 140 ) + 8; + wr[2] = VG_MAX( ui_text_line_width( ctx, player->username ), 140 ) + 8; wr[3] = 32; wr[0] = tag_root[0]-(wr[2]/2); wr[1] = tag_root[1]-(wr[3]/2); - ui_fill( wr, ui_opacity( ui_colour(k_ui_bg), 0.23f ) ); - ui_text( wr, player->username, 1, k_ui_align_middle_center, 0 ); - - ui_font_face( &vgf_default_small ); + ui_fill( ctx, wr, ui_opacity( ui_colour(ctx, k_ui_bg), 0.23f ) ); + ui_text( ctx, wr, player->username, 1, k_ui_align_middle_center, 0 ); + ctx->font = &vgf_default_small; /* medals */ int cols = 0; @@ -908,14 +916,17 @@ static void remote_player_nametag( ui_point tag_root, char buf[32]; vg_str str; - if( cols ){ + if( cols ) + { f32 w = (f32)wr[2] / (f32)cols; cols = 0; - for( int i=0; i<3; i ++ ){ - if( player->medals[i] ){ - ui_rect col = { wr[0] + (f32)cols*w, wr[1] + wr[3], w, - g_ui_ctx->font->ch }; + for( int i=0; i<3; i ++ ) + { + if( player->medals[i] ) + { + ui_rect col = { wr[0] + (f32)cols*w, wr[1] + wr[3], + w, ctx->font->ch }; vg_strnull( &str, buf, 32 ); #if 0 @@ -923,8 +934,8 @@ static void remote_player_nametag( ui_point tag_root, #endif vg_strcati32( &str, player->medals[i] ); - ui_text( col, buf, 1, k_ui_align_middle_center, - ui_colour( (enum ui_scheme_colour[]){ + ui_text( ctx, col, buf, 1, k_ui_align_middle_center, + ui_colour( ctx, (enum ui_scheme_colour[]){ k_ui_yellow, k_ui_gray, k_ui_orange }[i] ) ); cols ++; @@ -933,25 +944,30 @@ static void remote_player_nametag( ui_point tag_root, } } -static void remote_player_world_gui( m4x4f pv, v3f root_co, +static void remote_player_world_gui( ui_context *ctx, m4x4f pv, v3f root_co, struct network_player *player ){ ui_point tag_root; if( !player_tag_position( pv, root_co, tag_root ) ) return; - if( player ){ - remote_player_nametag( tag_root, player ); - chat_box( tag_root, player->chat_time, player->chat ); + if( player ) + { + remote_player_nametag( ctx, tag_root, player ); + chat_box( ctx, tag_root, player->chat_time, player->chat ); } - else { + else + { if( netplayers.chatting ) - chat_box( tag_root, vg.time_real, netplayers.chat_buffer ); + chat_box( ctx, tag_root, vg.time_real, netplayers.chat_buffer ); else - chat_box( tag_root, netplayers.chat_time, netplayers.chat_message ); + { + chat_box( ctx, tag_root, + netplayers.chat_time, netplayers.chat_message ); + } } } -static void remote_player_gui_info( ui_rect box, +static void remote_player_gui_info( ui_context *ctx, ui_rect box, const char *username, const char *activity, enum remote_player_gui_type type, @@ -960,12 +976,12 @@ static void remote_player_gui_info( ui_rect box, f32 opacity = in_world? 0.6f: 0.3f; if( type == k_remote_player_gui_type_you ) - ui_fill( box, ui_opacity( 0xff555555, opacity ) ); + ui_fill( ctx, box, ui_opacity( 0xff555555, opacity ) ); else - ui_fill( box, ui_opacity( 0xff000000, opacity ) ); + ui_fill( ctx, box, ui_opacity( 0xff000000, opacity ) ); if( type == k_remote_player_gui_type_friend ) - ui_outline( box, -1, ui_opacity( 0xff00c4f0, opacity ), 0 ); + ui_outline( ctx, box, -1, ui_opacity( 0xff00c4f0, opacity ), 0 ); ui_rect top, bottom; ui_split_ratio( box, k_ui_axis_h, 0.6666f, 1, top, bottom ); @@ -973,18 +989,17 @@ static void remote_player_gui_info( ui_rect box, u32 fg; if( type == k_remote_player_gui_type_friend ) - fg = ui_colour( k_ui_yellow + (in_world? k_ui_brighter: 0) ); + fg = ui_colour( ctx, k_ui_yellow + (in_world? k_ui_brighter: 0) ); else - fg = ui_colour( in_world? k_ui_fg: k_ui_fg+4 ); + fg = ui_colour( ctx, in_world? k_ui_fg: k_ui_fg+4 ); - ui_font_face( &vgf_default_large ); - ui_text( top, username, 1, k_ui_align_middle_center, fg ); - ui_font_face( &vgf_default_small ); - - ui_text( bottom, activity, 1, k_ui_align_middle_center, fg ); + ctx->font = &vgf_default_large; + ui_text( ctx, top, username, 1, k_ui_align_middle_center, fg ); + ctx->font = &vgf_default_small; + ui_text( ctx, bottom, activity, 1, k_ui_align_middle_center, fg ); } -void remote_players_imgui_lobby(void) +void remote_players_imgui_lobby( ui_context *ctx ) { if( network_client.user_intent == k_server_intent_online ){ if( !(steam_ready && @@ -997,19 +1012,20 @@ void remote_players_imgui_lobby(void) ui_px y = 50, width = 200, height = 42, gap = 2, x = vg.window_x - width; - ui_font_face( &vgf_default_large ); - ui_text( (ui_rect){ x, 0, width, height }, + ctx->font = &vgf_default_large; + ui_text( ctx, (ui_rect){ x, 0, width, height }, "In World", 1, k_ui_align_middle_center, 0 ); - ui_font_face( &vgf_default_small ); + ctx->font = &vgf_default_small; ui_rect us = { x, y, width, height }; /* FIXME: your location */ - remote_player_gui_info( us, steam_username_at_startup, "you", + remote_player_gui_info( ctx, us, steam_username_at_startup, "you", k_remote_player_gui_type_you, 1 ); y += height + gap; - for( u32 i=0; iactive || player->isblocked ) continue; @@ -1023,20 +1039,23 @@ void remote_players_imgui_lobby(void) } ui_rect box = { x, y, width, height }; - remote_player_gui_info( box, player->username, location, + remote_player_gui_info( ctx, box, player->username, location, player->isfriend, in_same_world ); y += height + gap; } } -void remote_players_imgui_world( world_instance *world, m4x4f pv, +void remote_players_imgui_world( ui_context *ctx, + world_instance *world, m4x4f pv, f32 max_dist, int geo_cull ) { - ui_flush( k_ui_shader_colour ); + ui_flush( ctx, k_ui_shader_colour, NULL ); - for( u32 i=0; iactive ){ + if( player->active ) + { v3f co; remote_player_position( i, co ); @@ -1046,7 +1065,8 @@ void remote_players_imgui_world( world_instance *world, m4x4f pv, (world-world_static.instances == k_world_purpose_hub)) continue; /* their in our active subworld */ - if( player->active_world != world ){ + if( player->active_world != world ) + { m4x3_mulv( global_miniworld.mmdl, co, co ); co[1] -= 2.0f; /* HACK lol */ } @@ -1076,24 +1096,24 @@ void remote_players_imgui_world( world_instance *world, m4x4f pv, player->opacity = vg_lerpf( player->opacity, opacity, vg.time_frame_delta * 2.0f ); - remote_player_world_gui( pv, co, player ); + remote_player_world_gui( ctx, pv, co, player ); - g_ui_ctx->colour[3] = player->opacity; - ui_flush( k_ui_shader_colour ); + vg_ui.colour[3] = player->opacity; + ui_flush( ctx, k_ui_shader_colour, NULL ); } } - g_ui_ctx->colour[3] = 1.0f; - - remote_player_world_gui( pv, localplayer.rb.co, NULL ); - ui_flush( k_ui_shader_colour ); + vg_ui.colour[3] = 1.0f; + remote_player_world_gui( ctx, pv, localplayer.rb.co, NULL ); + ui_flush( ctx, k_ui_shader_colour, NULL ); } -static void chat_escape(void){ +static void chat_escape( ui_context *ctx ) +{ netplayers.chatting = -1; } -static void chat_enter( char *buf, u32 len ){ +static void chat_enter( ui_context *ctx, char *buf, u32 len ){ vg_strncpy( buf, netplayers.chat_message, NETWORK_MAX_CHAT, k_strncpy_always_add_null ); netplayers.chatting = -1; @@ -1101,28 +1121,33 @@ static void chat_enter( char *buf, u32 len ){ chat_send_message( buf ); } -void remote_players_chat_imgui(void) +void remote_players_chat_imgui( ui_context *ctx ) { - if( netplayers.chatting == 1 ){ + if( netplayers.chatting == 1 ) + { ui_rect box = { 0, 0, 400, 40 }, window = { 0, 0, vg.window_x, vg.window_y }; ui_rect_center( window, box ); - struct ui_textbox_callbacks callbacks = { + struct ui_textbox_callbacks callbacks = + { .enter = chat_enter, .escape = chat_escape }; - ui_textbox( box, NULL, + ui_textbox( ctx, box, NULL, netplayers.chat_buffer, NETWORK_MAX_CHAT, 1, UI_TEXTBOX_AUTOFOCUS, &callbacks ); } - else { - if( netplayers.chatting == -1 ){ + else + { + if( netplayers.chatting == -1 ) + { netplayers.chatting = 0; srinput.state = k_input_state_resume; } - else { + else + { if( (skaterift.activity == k_skaterift_default) && button_down( k_srbind_chat ) ){ netplayers.chatting = 1; diff --git a/player_remote.h b/player_remote.h index 2d3250c..1a99bcb 100644 --- a/player_remote.h +++ b/player_remote.h @@ -101,8 +101,8 @@ void relink_all_remote_player_worlds(void); void player_remote_update_friendflags( struct network_player *remote ); void remote_players_init(void); void remote_sfx_pre_update(void); -void remote_player_network_imgui( m4x4f pv ); -void remote_players_imgui_world( world_instance *world, m4x4f pv, - f32 max_dist, int geo_cull ); -void remote_players_imgui_lobby(void); -void remote_players_chat_imgui(void); +void remote_player_network_imgui( ui_context *ctx, m4x4f pv ); +void remote_players_imgui_world( ui_context *ctx, world_instance *world, + m4x4f pv, f32 max_dist, int geo_cull ); +void remote_players_imgui_lobby( ui_context *ctx ); +void remote_players_chat_imgui( ui_context *ctx ); diff --git a/player_replay.c b/player_replay.c index 2bd1ab2..428c038 100644 --- a/player_replay.c +++ b/player_replay.c @@ -784,9 +784,9 @@ void skaterift_replay_init(void) replay_clear( &player_replay.local ); } -void skaterift_replay_debug_info(void) +void skaterift_replay_debug_info( ui_context *ctx ) { - player__debugtext( 2, "replay info" ); + player__debugtext( ctx, 2, "replay info" ); replay_buffer *replay = &player_replay.local; u32 head = 0, @@ -794,21 +794,23 @@ void skaterift_replay_debug_info(void) if( replay->tail ) tail = (void *)replay->tail - replay->data; if( replay->head ) head = (void *)replay->head - replay->data; - player__debugtext( 1, "head @%u | tail @%u\n", head, tail ); + player__debugtext( ctx, 1, "head @%u | tail @%u\n", head, tail ); - if( replay->statehead ){ - for( u32 i=0; istatehead ) + { + for( u32 i=0; istatehead->data_table[i][0], replay->statehead->data_table[i][1] ); } u32 state = (void *)replay->statehead - replay->data; - player__debugtext( 1, "gs @%u\n", state ); - player__debugtext( 1, "gamestate_size: %hu\n", + player__debugtext( ctx, 1, "gs @%u\n", state ); + player__debugtext( ctx, 1, "gamestate_size: %hu\n", replay->statehead->data_table[k_replay_framedata_gamestate][1] ); } else - player__debugtext( 1, "gs @NULL\n" ); + player__debugtext( ctx, 1, "gs @NULL\n" ); f64 start = replay->cursor, end = replay->cursor; @@ -818,7 +820,7 @@ void skaterift_replay_debug_info(void) f64 cur = replay->cursor - start, len = end - start; - player__debugtext( 1, "cursor: %.2fs / %.2fs\n", cur, len ); + player__debugtext( ctx, 1, "cursor: %.2fs / %.2fs\n", cur, len ); } static int _keyframe_cmp( const void *p1, const void *p2 ) @@ -833,9 +835,9 @@ static void replay_keyframe_sort(void) sizeof(replay_keyframe), _keyframe_cmp ); } -static void replay_fly_edit_keyframe( replay_keyframe *kf ) +static void replay_fly_edit_keyframe( ui_context *ctx, replay_keyframe *kf ) { - if( ui_click_down( UI_MOUSE_LEFT ) ) + if( ui_click_down( ctx, UI_MOUSE_LEFT ) ) { /* init freecam */ v3_copy( kf->cam.pos, player_replay.replay_freecam.pos ); @@ -846,7 +848,7 @@ static void replay_fly_edit_keyframe( replay_keyframe *kf ) } /* move freecam */ - ui_capture_mouse(0); + ui_capture_mouse( ctx, 0 ); freecam_preupdate(); if( vg_getkey(SDLK_q) ) @@ -863,7 +865,7 @@ static void replay_fly_edit_keyframe( replay_keyframe *kf ) kf->cam.fov = skaterift.cam.fov; } -void skaterift_replay_imgui(void) +void skaterift_replay_imgui( ui_context *ctx ) { if( skaterift.activity != k_skaterift_replay ) return; @@ -904,11 +906,11 @@ void skaterift_replay_imgui(void) if( player_replay.editor_mode ) { - u32 colour = ui_opacity( ui_colour(k_ui_fg), 0.3333f ); + u32 colour = ui_opacity( ui_colour(ctx,k_ui_fg), 0.3333f ); ui_rect cx = { vg.window_x/2, 0, 1, vg.window_y }, cy = { 0, vg.window_y/2, vg.window_x, 1 }; - ui_fill( cx, colour ); - ui_fill( cy, colour ); + ui_fill( ctx, cx, colour ); + ui_fill( ctx, cy, colour ); } replay_buffer *replay = &player_replay.local; @@ -925,7 +927,7 @@ void skaterift_replay_imgui(void) ui_px height = 32, cwidth = 2; ui_rect timeline = { 0, 0, vg.window_x, height }; - ui_fill( timeline, ui_colour( k_ui_bg ) ); + ui_fill( ctx, timeline, ui_colour( ctx, k_ui_bg ) ); /* cursor frame block */ if( replay->cursor_frame ) @@ -936,21 +938,21 @@ void skaterift_replay_imgui(void) s = (replay->cursor_frame->time - start) / len; ui_rect box = { s*(f64)vg.window_x, 0, VG_MAX(4,(ui_px)(l*vg.window_x)), timeline[3]+2 }; - ui_fill( box, ui_colour( k_ui_bg+4 ) ); + ui_fill( ctx, box, ui_colour( ctx, k_ui_bg+4 ) ); } } /* cursor */ ui_rect cusor = { cur * (f64)vg.window_x - (cwidth/2), 0, cwidth, (player_replay.editor_mode? 0: 16) + timeline[3] }; - ui_fill( cusor, ui_colour( k_ui_bg+7 ) ); + ui_fill( ctx, cusor, ui_colour( ctx, k_ui_bg+7 ) ); /* latest state marker */ if( replay->statehead ) { f64 t = (replay->statehead->time - start) / len; ui_rect tag = { t*(f64)vg.window_x, 0, 2, timeline[3]+8 }; - ui_fill( tag, ui_colour( k_ui_green+k_ui_brighter ) ); + ui_fill( ctx, tag, ui_colour( ctx, k_ui_green+k_ui_brighter ) ); } /* previous state marker */ @@ -959,21 +961,21 @@ void skaterift_replay_imgui(void) { f64 t = (prev->time - start) / len; ui_rect tag = { t*(f64)vg.window_x, 0, 2, timeline[3]+8 }; - ui_fill( tag, ui_colour( k_ui_yellow+k_ui_brighter ) ); + ui_fill( ctx, tag, ui_colour( ctx, k_ui_yellow+k_ui_brighter ) ); } snprintf( buffer, 128, "-%.2fs (F1: Edit replay)", (end-replay->cursor) ); - ui_text( timeline, buffer, 1, k_ui_align_middle_left, 0 ); - ui_text( timeline, "0s", 1, k_ui_align_middle_right, 0 ); + ui_text( ctx, timeline, buffer, 1, k_ui_align_middle_left, 0 ); + ui_text( ctx, timeline, "0s", 1, k_ui_align_middle_right, 0 ); if( !player_replay.editor_mode ) return; - ui_capture_mouse(1); + ui_capture_mouse( ctx, 1 ); ui_rect panel = { 0, timeline[3] + 20, 200, 400 }; - ui_fill( panel, ui_opacity( ui_colour(k_ui_bg), 0.5f ) ); + ui_fill( ctx, panel, ui_opacity( ui_colour( ctx, k_ui_bg ), 0.5f ) ); ui_rect_pad( panel, (ui_px[2]){4,4} ); - if( ui_button( panel, + if( ui_button( ctx, panel, (player_replay.replay_control == k_replay_control_play)? "Pause (space)": "Play (space)" ) == k_ui_button_click ) { @@ -982,9 +984,8 @@ void skaterift_replay_imgui(void) /* script bar */ ui_rect script = { 0, height + 2, vg.window_x, 16 }; - ui_fill( script, ui_colour( k_ui_bg ) ); - - f64 mouse_t = start + ((f64)g_ui_ctx->mouse[0] / (f64)vg.window_x)*len; + ui_fill( ctx, script, ui_colour( ctx, k_ui_bg ) ); + f64 mouse_t = start + ((f64)ctx->mouse[0] / (f64)vg.window_x)*len; /* keyframe draw and select */ bool absorb_by_keyframe = 0; @@ -1000,18 +1001,18 @@ void skaterift_replay_imgui(void) if( i ) { ui_rect con = { lx, script[1]+7, x-lx, 1 }; - ui_fill( con, ui_colour(k_ui_blue) ); + ui_fill( ctx, con, ui_colour( ctx, k_ui_blue ) ); vg_line( kf->cam.pos, player_replay.keyframes[i-1].cam.pos, VG__BLUE ); } /* keyframe selection */ ui_rect tag = { x, script[1], 16, 16 }; - if( ui_inside_rect( tag, g_ui_ctx->mouse ) ) + if( ui_inside_rect( tag, ctx->mouse ) ) { absorb_by_keyframe = 1; - if( ui_click_down( UI_MOUSE_LEFT ) ) + if( ui_click_down( ctx, UI_MOUSE_LEFT ) ) { if( player_replay.active_keyframe != i ) { @@ -1021,30 +1022,30 @@ void skaterift_replay_imgui(void) } else { - ui_outline( tag, 1, ui_colour(k_ui_fg), 0 ); + ui_outline( ctx, tag, 1, ui_colour(ctx, k_ui_fg), 0 ); } } /* edit controls */ - u32 drag_colour = ui_opacity( ui_colour(k_ui_bg+2), 0.5f ); + u32 drag_colour = ui_opacity( ui_colour(ctx, k_ui_bg+2), 0.5f ); if( i == player_replay.active_keyframe ) { - ui_outline( tag, 2, ui_colour(k_ui_fg), 0 ); + ui_outline( ctx, tag, 2, ui_colour(ctx, k_ui_fg), 0 ); ui_rect tray = { tag[0]+8-32, tag[1]+16+2, 64, 16 }; ui_rect dragbar = { tray[0]+16, tray[1], 32, 16 }; bool pos_correct = 0; - if( ui_inside_rect( dragbar, g_ui_ctx->mouse_click ) ) + if( ui_inside_rect( dragbar, ctx->mouse_click ) ) { - if( ui_clicking( UI_MOUSE_LEFT ) ) + if( ui_clicking( ctx, UI_MOUSE_LEFT ) ) { - drag_colour = ui_opacity( ui_colour(k_ui_fg), 0.5f ); + drag_colour = ui_opacity( ui_colour(ctx,k_ui_fg), 0.5f ); pos_correct = 1; replay_seek( &player_replay.local, mouse_t ); } - else if( ui_click_up( UI_MOUSE_LEFT ) ) + else if( ui_click_up( ctx, UI_MOUSE_LEFT ) ) { pos_correct = 1; kf->time = mouse_t; @@ -1062,27 +1063,30 @@ void skaterift_replay_imgui(void) if( pos_correct ) { - tag[0] = g_ui_ctx->mouse[0]-8; + tag[0] = ctx->mouse[0]-8; tray[0] = tag[0]+8-32; dragbar[0] = tray[0]+16; } } - if( ui_inside_rect( dragbar, g_ui_ctx->mouse ) ) + if( ui_inside_rect( dragbar, ctx->mouse ) ) { - g_ui_ctx->cursor = k_ui_cursor_hand; + ctx->cursor = k_ui_cursor_hand; } if( !pos_correct ) - ui_fill( tray, ui_opacity( ui_colour(k_ui_bg+2), 0.5f ) ); + { + ui_fill( ctx, tray, + ui_opacity( ui_colour( ctx, k_ui_bg+2 ), 0.5f ) ); + } - ui_fill( dragbar, drag_colour ); - ui_text( dragbar, ":::", 1, k_ui_align_middle_center, 0 ); + ui_fill( ctx, dragbar, drag_colour ); + ui_text( ctx, dragbar, ":::", 1, k_ui_align_middle_center, 0 ); if( !pos_correct ) { ui_rect btn = { tray[0], tray[1], 16, 16 }; - if( ui_button_text( btn, "X", 1 ) == k_ui_button_click ) + if( ui_button_text( ctx, btn, "X", 1 ) == k_ui_button_click ) { for( u32 j=i; jmouse ) ) + if( ui_inside_rect( script, ctx->mouse ) ) { - g_ui_ctx->cursor = k_ui_cursor_hand; + ctx->cursor = k_ui_cursor_hand; - ui_rect cursor = { g_ui_ctx->mouse[0], script[1], 4, 16 }; - ui_fill( cursor, ui_colour( k_ui_fg ) ); + ui_rect cursor = { ctx->mouse[0], script[1], 4, 16 }; + ui_fill( ctx, cursor, ui_colour( ctx, k_ui_fg ) ); - if( !absorb_by_keyframe && ui_click_down( UI_MOUSE_LEFT ) ) + if( !absorb_by_keyframe && ui_click_down( ctx, UI_MOUSE_LEFT ) ) { u32 max = vg_list_size( player_replay.keyframes ); if( player_replay.keyframe_count == max ) { - ui_start_modal( "Maximum keyframes reached", UI_MODAL_BAD ); + ui_start_modal( ctx, "Maximum keyframes reached", UI_MODAL_BAD ); } else { @@ -1142,27 +1146,27 @@ void skaterift_replay_imgui(void) /* timeline scrub */ bool start_in_timeline = - ui_clicking(UI_MOUSE_LEFT) && - ui_inside_rect(timeline, g_ui_ctx->mouse_click); - if( (ui_inside_rect( timeline, g_ui_ctx->mouse )) || start_in_timeline ) + ui_clicking(ctx, UI_MOUSE_LEFT) && + ui_inside_rect(timeline, ctx->mouse_click); + if( (ui_inside_rect( timeline, ctx->mouse )) || start_in_timeline ) { - ui_rect cursor = { g_ui_ctx->mouse[0], timeline[1], 4, timeline[3] }; - ui_fill( cursor, ui_colour( k_ui_fg ) ); - g_ui_ctx->cursor = k_ui_cursor_ibeam; + ui_rect cursor = { ctx->mouse[0], timeline[1], 4, timeline[3] }; + ui_fill( ctx, cursor, ui_colour( ctx, k_ui_fg ) ); + ctx->cursor = k_ui_cursor_ibeam; - if( ui_clicking( UI_MOUSE_LEFT ) && start_in_timeline ) + if( ui_clicking( ctx, UI_MOUSE_LEFT ) && start_in_timeline ) { replay_seek( &player_replay.local, mouse_t ); player_replay.active_keyframe = -1; } } - if( ui_button( panel, "Clear keyframes" ) == k_ui_button_click ) + if( ui_button( ctx, panel, "Clear keyframes" ) == k_ui_button_click ) { player_replay.keyframe_count = 0; } - if( (ui_button( panel, "Hide UI (F2)" ) == k_ui_button_click) ) + if( (ui_button( ctx, panel, "Hide UI (F2)" ) == k_ui_button_click) ) { player_replay.show_ui ^= 0x1; } @@ -1177,21 +1181,21 @@ void skaterift_replay_imgui(void) k_ui_button_holding_outside | k_ui_button_click; - if( ui_button( panel, "Edit cam" ) & mask_using ) + if( ui_button( ctx, panel, "Edit cam" ) & mask_using ) { - replay_fly_edit_keyframe( kf ); + replay_fly_edit_keyframe( ctx, kf ); } } - ui_info( panel, "World settings" ); + ui_info( ctx, panel, "World settings" ); f32 new_time = world_current_instance()->time; - if( ui_slider( panel, "Time of day", 0, 1, &new_time ) ) + if( ui_slider( ctx, panel, "Time of day", 0, 1, &new_time ) ) { world_current_instance()->time = new_time; } - ui_info( panel, "" ); - if( ui_button( panel, "Exit editor (F1)" ) == k_ui_button_click ) + ui_info( ctx, panel, "" ); + if( ui_button( ctx, panel, "Exit editor (F1)" ) == k_ui_button_click ) { player_replay.editor_mode = 0; replay_show_helpers(); diff --git a/player_replay.h b/player_replay.h index e97584c..313b4d4 100644 --- a/player_replay.h +++ b/player_replay.h @@ -116,8 +116,8 @@ void * replay_frame_data( replay_frame *frame, enum replay_framedata type ); void skaterift_replay_pre_update(void); -void skaterift_replay_imgui(void); -void skaterift_replay_debug_info(void); +void skaterift_replay_imgui( ui_context *ctx ); +void skaterift_replay_debug_info( ui_context *ctx ); void skaterift_record_frame( replay_buffer *replay, int force_gamestate ); void skaterift_replay_post_render(void); diff --git a/player_skate.c b/player_skate.c index 75b65fc..5024750 100644 --- a/player_skate.c +++ b/player_skate.c @@ -2796,15 +2796,16 @@ begin_collision:; } } -void player__skate_im_gui(void){ +void player__skate_im_gui( ui_context *ctx ) +{ struct player_skate_state *state = &player_skate.state; - player__debugtext( 1, "V: %5.2f %5.2f %5.2f",localplayer.rb.v[0], + player__debugtext( ctx, 1, "V: %5.2f %5.2f %5.2f",localplayer.rb.v[0], localplayer.rb.v[1], localplayer.rb.v[2] ); - player__debugtext( 1, "CO: %5.2f %5.2f %5.2f",localplayer.rb.co[0], + player__debugtext( ctx, 1, "CO: %5.2f %5.2f %5.2f",localplayer.rb.co[0], localplayer.rb.co[1], localplayer.rb.co[2] ); - player__debugtext( 1, "W: %5.2f %5.2f %5.2f",localplayer.rb.w[0], + player__debugtext( ctx, 1, "W: %5.2f %5.2f %5.2f",localplayer.rb.w[0], localplayer.rb.w[1], localplayer.rb.w[2] ); @@ -2822,19 +2823,14 @@ void player__skate_im_gui(void){ "grind_5050" }; - player__debugtext( 1, "activity: %s", activity_txt[state->activity] ); -#if 0 - player__debugtext( 1, "steer_s: %5.2f %5.2f [%.2f %.2f]", - state->steerx_s, state->steery_s, - k_steer_ground, k_steer_air ); -#endif - player__debugtext( 1, "flip: %.4f %.4f", state->flip_rate, + player__debugtext( ctx, 1, "activity: %s", activity_txt[state->activity] ); + player__debugtext( ctx, 1, "flip: %.4f %.4f", state->flip_rate, state->flip_time ); - player__debugtext( 1, "trickv: %.2f %.2f %.2f", + player__debugtext( ctx, 1, "trickv: %.2f %.2f %.2f", state->trick_vel[0], state->trick_vel[1], state->trick_vel[2] ); - player__debugtext( 1, "tricke: %.2fs %.2f %.2f %.2f", + player__debugtext( ctx, 1, "tricke: %.2fs %.2f %.2f %.2f", state->trick_time, state->trick_euler[0], state->trick_euler[1], diff --git a/player_skate.h b/player_skate.h index abbc7c5..8adb024 100644 --- a/player_skate.h +++ b/player_skate.h @@ -274,7 +274,8 @@ static float k_grind_balance = -40.0f, k_anim_transition = 0.12f; -static void player__skate_register(void){ +static void player__skate_register(void) +{ VG_VAR_F32( k_grind_dampener, flags=VG_VAR_CHEAT ); VG_VAR_F32( k_grind_spring, flags=VG_VAR_CHEAT ); VG_VAR_F32( k_grind_aligment, flags=VG_VAR_CHEAT ); @@ -308,7 +309,7 @@ void player__skate_bind (void); void player__skate_pre_update (void); void player__skate_update (void); void player__skate_post_update (void); -void player__skate_im_gui (void); +void player__skate_im_gui ( ui_context *ctx ); void player__skate_animate (void); void player__skate_pose (void *animator, player_pose *pose); void player__skate_effects( void *_animator, m4x3f *final_mtx, diff --git a/player_walk.c b/player_walk.c index b421e42..1e15afc 100644 --- a/player_walk.c +++ b/player_walk.c @@ -1094,16 +1094,18 @@ void player__walk_post_animate(void){ } -void player__walk_im_gui(void){ +void player__walk_im_gui( ui_context *ctx ) +{ struct player_walk *w = &player_walk; - player__debugtext( 1, "V: %5.2f %5.2f %5.2f (%5.2fm/s)", + player__debugtext( ctx, 1, "V: %5.2f %5.2f %5.2f (%5.2fm/s)", localplayer.rb.v[0], localplayer.rb.v[1], localplayer.rb.v[2], v3_length(localplayer.rb.v) ); - player__debugtext( 1, "CO: %5.2f %5.2f %5.2f",localplayer.rb.co[0], + player__debugtext( ctx, + 1, "CO: %5.2f %5.2f %5.2f",localplayer.rb.co[0], localplayer.rb.co[1], localplayer.rb.co[2] ); - player__debugtext( 1, "transition: %5.2f ", w->state.transition_t ); - player__debugtext( 1, "activity: %s\n", + player__debugtext( ctx, 1, "transition: %5.2f ", w->state.transition_t ); + player__debugtext( ctx, 1, "activity: %s\n", (const char *[]){ "air", "ground", "sit", @@ -1114,7 +1116,7 @@ void player__walk_im_gui(void){ "odrop_in", "oregular" } [w->state.activity] ); - player__debugtext( 1, "surface: %s\n", + player__debugtext( ctx, 1, "surface: %s\n", (const char *[]){ "concrete", "wood", "grass", diff --git a/player_walk.h b/player_walk.h index da4172c..5da0350 100644 --- a/player_walk.h +++ b/player_walk.h @@ -104,7 +104,7 @@ void player__walk_post_update (void); void player__walk_animate (void); void player__walk_pose (void *animator, player_pose *pose); void player__walk_post_animate(void); -void player__walk_im_gui (void); +void player__walk_im_gui ( ui_context *ctx ); void player__walk_bind (void); void player__walk_reset (void); void player__walk_restore (void); diff --git a/render.c b/render.c index 0050f94..9478124 100644 --- a/render.c +++ b/render.c @@ -1,4 +1,6 @@ #include "render.h" +#include "vg/vg_engine.h" +#include "vg/vg_platform.h" struct framebuffer framebuffers[] = { @@ -559,8 +561,9 @@ void render_fsquad2(void) /* * Call this inside the UI function */ -void render_view_framebuffer_ui(void) +void render_view_framebuffer_ui( ui_context *ctx ) { + // FIXME10 #if 0 int viewing_count = 0; diff --git a/render.h b/render.h index a0bde7e..2c4926d 100644 --- a/render.h +++ b/render.h @@ -84,7 +84,7 @@ void render_init(void); void render_fsquad(void); void render_fsquad1(void); void render_fsquad2(void); -void render_view_framebuffer_ui(void); +void render_view_framebuffer_ui( ui_context *ctx ); void render_fb_bind_texture( framebuffer *fb, int attachment, int slot ); void render_fb_inverse_ratio( framebuffer *fb, v2f inverse ); void render_fb_get_current_res( struct framebuffer *fb, int *x, int *y ); diff --git a/skaterift.c b/skaterift.c index c7b8688..f4fc3c1 100644 --- a/skaterift.c +++ b/skaterift.c @@ -738,21 +738,22 @@ void vg_render(void) gui_render_icons(); } -void vg_gui(void) +void vg_gui( ui_context *ctx ) { if( skaterift.op == k_async_op_clientloading ) return; - gui_draw(); + gui_draw( ctx ); - if( k_tools_mode ){ + if( k_tools_mode ) + { ui_rect null; ui_rect screen = { 0, 0, vg.window_x, vg.window_y }; ui_rect panel = { 0, 0, 1000, 700 }; ui_rect_center( screen, panel ); - ui_capture_mouse( 1 ); + ui_capture_mouse( ctx, 1 ); - ui_fill( panel, ui_colour( k_ui_bg+1 ) ); - ui_outline( panel, 1, ui_colour( k_ui_bg+7 ), 0 ); + ui_fill( ctx, panel, ui_colour( ctx, k_ui_bg+1 ) ); + ui_outline( ctx, panel, 1, ui_colour( ctx, k_ui_bg+7 ), 0 ); ui_rect_pad( panel, (ui_px[2]){ 8, 8 } ); @@ -760,30 +761,32 @@ void vg_gui(void) } if( k_light_editor ) - imgui_world_light_edit( world_current_instance() ); + imgui_world_light_edit( ctx, world_current_instance() ); - g_ui_ctx->tex_bg = gpipeline.fb_main->attachments[0].id; - render_fb_inverse_ratio( gpipeline.fb_main, g_ui_ctx->bg_inverse_ratio ); + vg_ui.tex_bg = gpipeline.fb_main->attachments[0].id; + render_fb_inverse_ratio( gpipeline.fb_main, vg_ui.bg_inverse_ratio ); - menu_gui(); - player__im_gui(); + menu_gui( ctx ); + player__im_gui( ctx ); world_instance *world = world_current_instance(); - world_routes_imgui( world ); - skaterift_replay_imgui(); - workshop_form_gui(); - render_view_framebuffer_ui(); - remote_player_network_imgui( vg.pv ); + world_routes_imgui( ctx, world ); + skaterift_replay_imgui( ctx ); + workshop_form_gui( ctx ); + render_view_framebuffer_ui( ctx ); + remote_player_network_imgui( ctx, vg.pv ); if( menu_viewing_map() ) { - remote_players_imgui_world( world_current_instance(), vg.pv, 2000.0f, 0 ); - remote_players_imgui_lobby(); + remote_players_imgui_world( ctx, world_current_instance(), + vg.pv, 2000.0f, 0 ); + remote_players_imgui_lobby( ctx ); } else { - remote_players_chat_imgui(); /* TODO: conditional */ - remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 ); + remote_players_chat_imgui( ctx ); /* TODO: conditional */ + remote_players_imgui_world( ctx, world_current_instance(), + vg.pv, 100.0f, 1 ); } } diff --git a/workshop.c b/workshop.c index 84ea841..639337e 100644 --- a/workshop.c +++ b/workshop.c @@ -1,10 +1,10 @@ - #include "vg/vg_engine.h" #include "vg/vg_tex.h" #include "vg/vg_image.h" #include "vg/vg_msg.h" #include "vg/vg_binstr.h" #include "vg/vg_loader.h" +#include "vg/vg_io.h" #include "ent_skateshop.h" #include "vg/vg_steam_auth.h" @@ -335,14 +335,17 @@ static void _workshop_form_submit_thread( void *data ) vg_info( "binstr: %s\n", short_descriptor_str ); vg_dir dir; - if( !vg_dir_open( &dir, folder.buffer ) ){ + if( !vg_dir_open( &dir, folder.buffer ) ) + { vg_error( "could not open addon folder '%s'\n", folder.buffer ); workshop_form.op = k_workshop_op_none; return; } - while( vg_dir_next_entry(&dir) ){ - if( vg_dir_entry_type(&dir) == k_vg_entry_type_file ){ + while( vg_dir_next_entry(&dir) ) + { + if( vg_dir_entry_type(&dir) == k_vg_entry_type_file ) + { const char *d_name = vg_dir_entry_name(&dir); if( d_name[0] == '.' ) continue; @@ -403,29 +406,37 @@ static void _workshop_form_submit_thread( void *data ) /* * Entry point for the publishing submission operation */ -static void workshop_op_submit(void){ +static void workshop_op_submit( ui_context *ctx ) +{ /* TODO: Show these errors to the user */ - if( workshop_form.submission.submit_title ){ - if( !workshop_form.submission.title[0] ){ - ui_start_modal( "Cannot submit because a title is required\n", - UI_MODAL_WARN); + if( workshop_form.submission.submit_title ) + { + if( !workshop_form.submission.title[0] ) + { + ui_start_modal( ctx, "Cannot submit because a title is required\n", + UI_MODAL_WARN ); workshop_form.op = k_workshop_op_none; return; } } - if( workshop_form.submission.submit_description ){ - if( !workshop_form.submission.description[0] ){ - ui_start_modal( "Cannot submit because a description is required\n", + if( workshop_form.submission.submit_description ) + { + if( !workshop_form.submission.description[0] ) + { + ui_start_modal( ctx, + "Cannot submit because a description is required\n", UI_MODAL_WARN ); workshop_form.op = k_workshop_op_none; return; } } - if( workshop_form.submission.submit_file_and_image ){ - if( workshop_form.file_intent == k_workshop_form_file_intent_none ){ - ui_start_modal( "Cannot submit because the file is " + if( workshop_form.submission.submit_file_and_image ) + { + if( workshop_form.file_intent == k_workshop_form_file_intent_none ) + { + ui_start_modal( ctx, "Cannot submit because the file is " "empty or unspecified\n", UI_MODAL_WARN ); workshop_form.op = k_workshop_op_none; return; @@ -532,25 +543,29 @@ static void _workshop_form_load_thread( void *data ) /* * Entry point for load model operation */ -static void workshop_op_load_model(void){ +static void workshop_op_load_model( ui_context *ctx ) +{ world_instance *world = world_current_instance(); workshop_form.view_world = world; - if( workshop_form.submission.type == k_addon_type_board ){ - if( mdl_arrcount( &world->ent_swspreview ) ){ - workshop_form.ptr_ent = - mdl_arritm( &world->ent_swspreview, 0 ); + if( workshop_form.submission.type == k_addon_type_board ) + { + if( mdl_arrcount( &world->ent_swspreview ) ) + { + workshop_form.ptr_ent = mdl_arritm( &world->ent_swspreview, 0 ); } - else{ - ui_start_modal( "There is no ent_swspreview in the level. \n" + else + { + ui_start_modal( ctx, "There is no ent_swspreview in the level. \n" "Cannot publish here\n", UI_MODAL_BAD ); workshop_form.op = k_workshop_op_none; return; } } else if( workshop_form.submission.type == k_addon_type_player ){} - else { - ui_start_modal( "Don't know how to prepare for this item type. \n" + else + { + ui_start_modal( ctx, "Don't know how to prepare for this item type. \n" "Please contact the developers.\n", UI_MODAL_BAD ); workshop_form.op = k_workshop_op_none; return; @@ -570,7 +585,8 @@ static void workshop_op_load_model(void){ */ static void workshop_form_async_imageload( void *data, u32 len ) { - if( data ){ + if( data ) + { struct framebuffer_attachment *a = &gpipeline.fb_workshop_preview->attachments[0]; @@ -581,11 +597,12 @@ static void workshop_form_async_imageload( void *data, u32 len ) stbi_image_free( data ); vg_success( "Loaded workshop preview image\n" ); } - else{ + else + { snprintf( workshop_form.error_msg, sizeof(workshop_form.error_msg), "Preview image could not be loaded. Reason: %s\n", stbi_failure_reason() ); - ui_start_modal( workshop_form.error_msg, UI_MODAL_BAD ); + ui_start_modal( &vg_ui.ctx, workshop_form.error_msg, UI_MODAL_BAD ); } workshop_form.op = k_workshop_op_none; } @@ -601,27 +618,33 @@ static void _workshop_load_preview_thread( void *data ){ vg_strcat( &path, workshop_form.addon_folder ); vg_strcat( &path, "/preview.jpg" ); - if( vg_strgood( &path ) ){ + if( vg_strgood( &path ) ) + { stbi_set_flip_vertically_on_load(1); int x, y, nc; u8 *rgb = stbi_load( path.buffer, &x, &y, &nc, 3 ); - if( rgb ){ - if( (x == WORKSHOP_PREVIEW_WIDTH) && (y == WORKSHOP_PREVIEW_HEIGHT) ){ + if( rgb ) + { + if( (x == WORKSHOP_PREVIEW_WIDTH) && (y == WORKSHOP_PREVIEW_HEIGHT) ) + { vg_async_call( workshop_form_async_imageload, rgb, x*y*3 ); } - else{ + else + { vg_error( "Resolution does not match framebuffer, so we can't" " show it\n" ); stbi_image_free( rgb ); vg_async_call( workshop_form_async_imageload, NULL, 0 ); } } - else{ + else + { vg_async_call( workshop_form_async_imageload, NULL, 0 ); } } - else{ + else + { vg_async_call( workshop_form_async_imageload, NULL, 0 ); } } @@ -710,7 +733,8 @@ static void workshop_op_download_and_view_submission( int result_index ) vg_loader_start( _workshop_load_preview_thread, NULL ); } - else{ + else + { vg_error( "GetQueryUGCResult: Index out of range\n" ); workshop_form.op = k_workshop_op_none; } @@ -726,7 +750,8 @@ static void workshop_op_download_and_view_submission( int result_index ) */ static void workshop_view_page( int req ) { - if( workshop_form.ugc_query.result != k_EResultOK ){ + if( workshop_form.ugc_query.result != k_EResultOK ) + { vg_error( "Tried to change page without complete data\n" ); workshop_form.op = k_workshop_op_none; return; @@ -744,7 +769,8 @@ static void workshop_view_page( int req ) workshop_form.published_files_list_length = count; ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - for( int i=0; ititle, 80, "Error (%d)", details.m_eResult ); } - else{ + else + { vg_strncpy( details.m_rgchTitle, pfile->title, 80, k_strncpy_always_add_null ); } @@ -764,7 +792,8 @@ static void workshop_view_page( int req ) pfile->result = details.m_eResult; pfile->result_index = start+i; } - else{ + else + { pfile->result = k_EResultValueOutOfRange; pfile->result_index = -1; snprintf( pfile->title, 80, "Error (invalid index)" ); @@ -780,8 +809,10 @@ static void on_workshop_UGCQueryComplete( void *data, void *userdata ) SteamUGCQueryCompleted_t *query = data; workshop_form.ugc_query.result = query->m_eResult; - if( query->m_eResult == k_EResultOK ){ - if( query->m_unTotalMatchingResults > 50 ){ + if( query->m_eResult == k_EResultOK ) + { + if( query->m_unTotalMatchingResults > 50 ) + { vg_warn( "You have %d items submitted, " "we can only view the last 50\n" ); } @@ -799,7 +830,8 @@ static void on_workshop_UGCQueryComplete( void *data, void *userdata ) workshop_view_page( 0 ); } - else{ + else + { vg_error( "Steam UGCQuery failed (%d)\n", query->m_eResult ); workshop_form.view_published_page_count = 0; workshop_form.view_published_page_id = 0; @@ -815,8 +847,10 @@ static void on_workshop_UGCQueryComplete( void *data, void *userdata ) */ int workshop_submit_command( int argc, const char *argv[] ) { - if( !steam_ready ){ - ui_start_modal( "Steam API is not initialized\n", UI_MODAL_BAD ); + if( !steam_ready ) + { + ui_start_modal( &vg_ui.ctx, + "Steam API is not initialized\n", UI_MODAL_BAD ); return 0; } @@ -854,7 +888,8 @@ void workshop_init(void) vg_console_reg_cmd( "workshop_submit", workshop_submit_command, NULL ); } -static void workshop_render_world_preview(void){ +static void workshop_render_world_preview(void) +{ render_fb_bind( gpipeline.fb_workshop_preview, 0 ); glClearColor( 0.0f, 0.0f, 0.3f, 1.0f ); @@ -871,7 +906,8 @@ static void workshop_render_world_preview(void){ /* * Redraw the playermodel into the workshop framebuffer */ -static void workshop_render_player_preview(void){ +static void workshop_render_player_preview(void) +{ render_fb_bind( gpipeline.fb_workshop_preview, 0 ); glClearColor( 0.16f, 0.15f, 0.15f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); @@ -925,8 +961,10 @@ static void workshop_render_player_preview(void){ /* * Redraw the model file into the workshop framebuffer */ -static void workshop_render_board_preview(void){ - if( !workshop_form.ptr_ent ){ +static void workshop_render_board_preview(void) +{ + if( !workshop_form.ptr_ent ) + { return; } @@ -1019,19 +1057,23 @@ static void workshop_render_board_preview(void){ * ----------------------------------------------------------------------------- */ -static void workshop_changed_model_path( char *buf, u32 len ){ +static void workshop_changed_model_path( ui_context *ctx, char *buf, u32 len ) +{ workshop_form.submission.submit_file_and_image = 1; } -static void workshop_changed_title( char *buf, u32 len ){ +static void workshop_changed_title( ui_context *ctx, char *buf, u32 len ) +{ workshop_form.submission.submit_title = 1; } -static void workshop_changed_description( char *buf, u32 len ){ +static void workshop_changed_description( ui_context *ctx, char *buf, u32 len ) +{ workshop_form.submission.submit_description = 1; } -static void workshop_form_gui_page_undecided( ui_rect content ){ +static void workshop_form_gui_page_undecided( ui_context *ctx, ui_rect content ) +{ ui_rect box; rect_copy( content, box ); box[3] = 128; @@ -1040,9 +1082,10 @@ static void workshop_form_gui_page_undecided( ui_rect content ){ 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_text( ctx, 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, + ui_enum( ctx, row, "Type:", workshop_form_type_opts, 4, &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 ); @@ -1054,8 +1097,10 @@ static void workshop_form_gui_page_undecided( ui_rect content ){ ui_split_ratio( button_l, k_ui_axis_v, 0.5f, 2, button_l, button_r ); enum addon_type type = workshop_form.submission.submission_type_selection; - if( type != k_addon_type_none){ - if( ui_button_text( button_l, "OK", 1 ) == 1 ){ + if( type != k_addon_type_none) + { + if( ui_button_text( ctx, button_l, "OK", 1 ) == 1 ) + { workshop_form.submission.type = type; if( type == k_addon_type_world ){ @@ -1064,45 +1109,56 @@ static void workshop_form_gui_page_undecided( ui_rect content ){ } } } - 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) ); + else + { + ui_fill( ctx, button_l, ui_colour(ctx,k_ui_bg) ); + ui_text( ctx, button_l, "OK", 1, k_ui_align_middle_center, + ui_colour(ctx, k_ui_bg+4) ); } - if( ui_button_text( button_r, "Cancel", 1 ) == 1 ){ + if( ui_button_text( ctx, button_r, "Cancel", 1 ) == 1 ) + { workshop_form.page = k_workshop_form_open; workshop_form.file_intent = k_workshop_form_file_intent_none; } } -static void workshop_form_gui_draw_preview( ui_rect img_box ){ +static void workshop_form_gui_draw_preview( ui_context *ctx, ui_rect img_box ) +{ enum addon_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 ); + if( workshop_form.file_intent == k_workshop_form_file_intent_keep_old ) + { + ui_image( ctx, + 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 ); + else if( workshop_form.file_intent == k_workshop_form_file_intent_new ) + { + ui_image( ctx, + img_box, &gpipeline.fb_workshop_preview->attachments[0].id ); - if( type == k_addon_type_world ){ + if( type == k_addon_type_world ) + { return; } - int hover = ui_inside_rect( img_box, g_ui_ctx->mouse ), - target = ui_inside_rect( img_box, g_ui_ctx->mouse_click ); + int hover = ui_inside_rect( img_box, ctx->mouse ), + target = ui_inside_rect( img_box, ctx->mouse_click ); - if( ui_click_down(UI_MOUSE_MIDDLE) && target ){ + if( ui_click_down(ctx,UI_MOUSE_MIDDLE) && target ) + { v3_copy( workshop_form.view_offset, workshop_form.view_offset_begin ); } - else if( ui_click_down(UI_MOUSE_LEFT) && target ){ + else if( ui_click_down(ctx,UI_MOUSE_LEFT) && target ) + { v2_copy( workshop_form.view_angles, workshop_form.view_angles_begin ); } - if( ui_clicking(UI_MOUSE_MIDDLE) && target ){ - v2f delta = { g_ui_ctx->mouse[0]-g_ui_ctx->mouse_click[0], - g_ui_ctx->mouse[1]-g_ui_ctx->mouse_click[1] }; + if( ui_clicking(ctx,UI_MOUSE_MIDDLE) && target ) + { + v2f delta = { ctx->mouse[0]-ctx->mouse_click[0], + ctx->mouse[1]-ctx->mouse_click[1] }; float *begin = workshop_form.view_offset_begin, *offset = workshop_form.view_offset; @@ -1110,9 +1166,10 @@ static void workshop_form_gui_draw_preview( ui_rect img_box ){ offset[2] = vg_clampf( begin[2]-delta[1]*0.002f, -1.0f, 1.0f ); workshop_form.view_changed = 1; } - else if( ui_clicking(UI_MOUSE_LEFT) && target ){ - v2f delta = { g_ui_ctx->mouse[0]-g_ui_ctx->mouse_click[0], - g_ui_ctx->mouse[1]-g_ui_ctx->mouse_click[1] }; + else if( ui_clicking(ctx,UI_MOUSE_LEFT) && target ) + { + v2f delta = { ctx->mouse[0]-ctx->mouse_click[0], + ctx->mouse[1]-ctx->mouse_click[1] }; v2f angles; v2_muladds( workshop_form.view_angles_begin, delta, 0.002f, angles); @@ -1126,38 +1183,43 @@ static void workshop_form_gui_draw_preview( ui_rect img_box ){ workshop_form.view_changed = 1; } - if( !ui_clicking(UI_MOUSE_LEFT) && hover ){ + if( !ui_clicking(ctx,UI_MOUSE_LEFT) && hover ) + { float zoom = workshop_form.view_dist; zoom += vg.mouse_wheel[1] * -0.07f; zoom = vg_clampf( zoom, 0.4f, 2.0f ); - if( zoom != workshop_form.view_dist ){ + if( zoom != workshop_form.view_dist ) + { workshop_form.view_changed = 1; workshop_form.view_dist = zoom; } } } - else{ - ui_text( img_box, "No image", 1, k_ui_align_middle_center, - ui_colour( k_ui_orange ) ); + else + { + ui_text( ctx, img_box, "No image", 1, k_ui_align_middle_center, + ui_colour( ctx, k_ui_orange ) ); } } -static void workshop_form_gui_edit_page( ui_rect content ){ +static void workshop_form_gui_edit_page( ui_context *ctx, ui_rect content ) +{ enum addon_type type = workshop_form.submission.type; - if( type == k_addon_type_none ){ - workshop_form_gui_page_undecided( content ); + if( type == k_addon_type_none ) + { + workshop_form_gui_page_undecided( ctx, 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_fill( ctx, image_plane, ui_colour( ctx, 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 ); + workshop_form_gui_draw_preview( ctx, img_box ); /* file path */ ui_rect file_button, file_label; @@ -1166,23 +1228,28 @@ static void workshop_form_gui_edit_page( ui_rect content ){ snprintf( buf, 128, "Addon folder: skaterift/%s", workshop_filetype_folder() ); - if( type == k_addon_type_world ){ - struct ui_textbox_callbacks callbacks = { + if( type == k_addon_type_world ) + { + struct ui_textbox_callbacks callbacks = + { .change = workshop_changed_model_path }; - ui_textbox( content, buf, workshop_form.addon_folder, + ui_textbox( ctx, content, buf, workshop_form.addon_folder, vg_list_size(workshop_form.addon_folder), 1, 0, &callbacks ); } - else{ + else + { ui_rect file_entry; - ui_standard_widget( content, file_entry, 1 ); + ui_standard_widget( ctx, content, file_entry, 1 ); 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( workshop_form.file_intent != k_workshop_form_file_intent_none ) + { + ui_text( ctx, file_entry, workshop_form.addon_folder, 1, + k_ui_align_middle_left, ui_colour( ctx, k_ui_fg+4 ) ); - if( ui_button_text( file_button, "Remove", 1 ) == 1 ){ + if( ui_button_text( ctx, file_button, "Remove", 1 ) == 1 ) + { if( type == k_addon_type_board ) player_board_unload( &workshop_form.board_model ); else if( type == k_addon_type_player ) @@ -1192,17 +1259,20 @@ static void workshop_form_gui_edit_page( ui_rect content ){ workshop_form.addon_folder[0] = '\0'; } } - else{ - struct ui_textbox_callbacks callbacks = { + else + { + struct ui_textbox_callbacks callbacks = + { .change = workshop_changed_model_path }; - ui_textbox( file_entry, buf, workshop_form.addon_folder, + ui_textbox( ctx, file_entry, buf, workshop_form.addon_folder, vg_list_size(workshop_form.addon_folder), 1, 0, &callbacks ); - if( ui_button_text( file_button, "Load", 1 ) == 1 ){ - workshop_op_load_model(); + if( ui_button_text( ctx, file_button, "Load", 1 ) == 1 ) + { + workshop_op_load_model( ctx ); } } } @@ -1214,23 +1284,24 @@ static void workshop_form_gui_edit_page( ui_rect content ){ struct ui_textbox_callbacks callbacks = { .change = workshop_changed_title }; - ui_textbox( content, str_title, workshop_form.submission.title, + ui_textbox( ctx, content, str_title, workshop_form.submission.title, vg_list_size(workshop_form.submission.title), 1, 0, &callbacks ); } /* visibility option */ { - ui_enum( content, "Visibility:", workshop_form_visibility_opts, + ui_enum( ctx, content, "Visibility:", workshop_form_visibility_opts, 4, &workshop_form.submission.visibility ); } /* description box */ { - struct ui_textbox_callbacks callbacks = { + struct ui_textbox_callbacks callbacks = + { .change = workshop_changed_description }; - ui_textbox( content, str_desc, workshop_form.submission.description, + ui_textbox( ctx, content, str_desc, workshop_form.submission.description, vg_list_size(workshop_form.submission.description), 4, UI_TEXTBOX_MULTILINE|UI_TEXTBOX_WRAP, &callbacks ); } @@ -1248,10 +1319,12 @@ static void workshop_form_gui_edit_page( ui_rect content ){ ui_split_ratio( submission_center, k_ui_axis_v, 0.5f, 8, btn_left, btn_right ); - if( ui_button_text( btn_left, "Publish", 1 ) == 1 ){ - workshop_op_submit(); + if( ui_button_text( ctx, btn_left, "Publish", 1 ) == 1 ) + { + workshop_op_submit( ctx ); } - if( ui_button_text( btn_right, "Cancel", 1 ) == 1 ){ + if( ui_button_text( ctx, btn_right, "Cancel", 1 ) == 1 ) + { workshop_form.page = k_workshop_form_open; player_board_unload( &workshop_form.board_model ); workshop_form.file_intent = k_workshop_form_file_intent_none; @@ -1267,14 +1340,14 @@ static void workshop_form_gui_edit_page( ui_rect content ){ ui_px btn_width = 32; rect_copy( disclaimer_row, inner ); - inner[2] = ui_text_line_width( disclaimer_text ) + btn_width+8; + inner[2] = ui_text_line_width( ctx, disclaimer_text ) + btn_width+8; ui_rect label; ui_rect_center( disclaimer_row, inner ); ui_split( inner, k_ui_axis_v, inner[2]-btn_width, 0, label, btn_right); ui_rect_pad( btn_right, (ui_px[2]){2,2} ); - if( ui_button_text( btn_right, "\xb2", 2 ) == 1 ) + if( ui_button_text( ctx, btn_right, "\xb2", 2 ) == 1 ) { ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( hSteamFriends, @@ -1282,22 +1355,24 @@ static void workshop_form_gui_edit_page( ui_rect content ){ k_EActivateGameOverlayToWebPageMode_Default ); } - ui_text( label, disclaimer_text, 1, k_ui_align_middle_left, - ui_colour( k_ui_fg+4 ) ); + ui_text( ctx, label, disclaimer_text, 1, k_ui_align_middle_left, + ui_colour( ctx, k_ui_fg+4 ) ); } -static void workshop_form_gui_sidebar( ui_rect sidebar ) +static void workshop_form_gui_sidebar( ui_context *ctx, ui_rect sidebar ) { - ui_fill( sidebar, ui_colour( k_ui_bg+2 ) ); + ui_fill( ctx, sidebar, ui_colour( ctx, k_ui_bg+2 ) ); ui_rect title; ui_split( sidebar, k_ui_axis_h, 28, 0, title, sidebar ); - if( workshop_form.page == k_workshop_form_edit ){ - ui_text( title, "Editing", 1, k_ui_align_middle_center, 0 ); + if( workshop_form.page == k_workshop_form_edit ) + { + ui_text( ctx, title, "Editing", 1, k_ui_align_middle_center, 0 ); ui_split( sidebar, k_ui_axis_h, 28, 0, title, sidebar ); - if( workshop_form.submission.type != k_addon_type_none ){ + if( workshop_form.submission.type != k_addon_type_none ) + { char buf[512]; vg_str str; vg_strnull( &str, buf, 512 ); @@ -1316,8 +1391,8 @@ static void workshop_form_gui_sidebar( ui_rect sidebar ) else vg_strcat( &str, "???." ); - ui_text( title, buf, 1, k_ui_align_middle_center, - ui_colour(k_ui_fg+4) ); + ui_text( ctx, title, buf, 1, k_ui_align_middle_center, + ui_colour(ctx, k_ui_fg+4) ); } return; } @@ -1325,12 +1400,12 @@ static void workshop_form_gui_sidebar( ui_rect sidebar ) /* * sidebar existing entries panel */ - ui_text( title, "Your submissions", 1, k_ui_align_middle_center, 0 ); + ui_text( ctx, title, "Your submissions", 1, k_ui_align_middle_center, 0 ); ui_rect controls, btn_create_new; ui_split( sidebar, k_ui_axis_h, 32, 0, controls, sidebar ); ui_split( sidebar, k_ui_axis_h, -32, 0, sidebar, btn_create_new ); - ui_fill( controls, ui_colour( k_ui_bg+1 ) ); + ui_fill( ctx, controls, ui_colour( ctx, k_ui_bg+1 ) ); char buf[32]; vg_str str; @@ -1343,20 +1418,23 @@ static void workshop_form_gui_sidebar( ui_rect sidebar ) ui_rect_pad( controls, (ui_px[2]){0,4} ); ui_rect info; ui_split_ratio( controls, k_ui_axis_v, 0.25f, 0, info, controls ); - ui_text( info, buf, 1, k_ui_align_middle_center, 0 ); + ui_text( ctx, info, buf, 1, k_ui_align_middle_center, 0 ); ui_rect btn_left, btn_right; ui_split_ratio( controls, k_ui_axis_v, 0.5f, 2, btn_left, btn_right ); - if( ui_button_text( btn_left, "newer", 1 ) == 1 ){ + if( ui_button_text( ctx, btn_left, "newer", 1 ) == 1 ) + { workshop_view_page( workshop_form.view_published_page_id-1 ); } - if( ui_button_text( btn_right, "older", 1 ) == 1 ){ + if( ui_button_text( ctx, btn_right, "older", 1 ) == 1 ) + { workshop_view_page( workshop_form.view_published_page_count+1 ); } - if( ui_button_text( btn_create_new, "Create New Item", 1 ) == 1 ){ + if( ui_button_text( ctx, btn_create_new, "Create New Item", 1 ) == 1 ) + { workshop_reset_submission_data(); workshop_form.submission.submit_title = 1; workshop_form.submission.submit_description = 1; @@ -1364,25 +1442,29 @@ static void workshop_form_gui_sidebar( ui_rect sidebar ) workshop_form.page = k_workshop_form_edit; } - for( int i=0; ititle, 1 ) == 1 ){ - if( pfile->result == k_EResultOK ){ + if( ui_button_text( ctx, item, pfile->title, 1 ) == 1 ) + { + if( pfile->result == k_EResultOK ) + { vg_info( "Select index: %d\n", pfile->result_index ); workshop_op_download_and_view_submission( pfile->result_index ); } - else{ + else + { vg_warn( "Cannot select that item, result not OK\n" ); } } } } -void workshop_form_gui(void) +void workshop_form_gui( ui_context *ctx ) { enum workshop_form_page stable_page = workshop_form.page; if( stable_page == k_workshop_form_hidden ) return; @@ -1391,22 +1473,24 @@ void workshop_form_gui(void) ui_rect screen = { 0, 0, vg.window_x, vg.window_y }; ui_rect window = { 0, 0, 1000, 700 }; ui_rect_center( screen, window ); - g_ui_ctx->wants_mouse = 1; + ctx->wants_mouse = 1; - ui_fill( window, ui_colour( k_ui_bg+1 ) ); - ui_outline( window, 1, ui_colour( k_ui_bg+7 ), 0 ); + ui_fill( ctx, window, ui_colour( ctx, k_ui_bg+1 ) ); + ui_outline( ctx, window, 1, ui_colour( ctx, k_ui_bg+7 ), 0 ); ui_rect title, panel; ui_split( window, k_ui_axis_h, 28, 0, title, panel ); - ui_fill( title, ui_colour( k_ui_bg+7 ) ); - ui_text( title, "Workshop tool", 1, k_ui_align_middle_center, - ui_colourcont(k_ui_bg+7) ); + ui_fill( ctx, title, ui_colour( ctx, k_ui_bg+7 ) ); + ui_text( ctx, title, "Workshop tool", 1, k_ui_align_middle_center, + ui_colourcont( ctx, k_ui_bg+7 ) ); ui_rect quit_button; ui_split( title, k_ui_axis_v, title[2]-title[3], 2, title, quit_button ); - if( vg_loader_availible() ){ - if( ui_button_text( quit_button, "X", 1 ) == 1 ){ + if( vg_loader_availible() ) + { + if( ui_button_text( ctx, quit_button, "X", 1 ) == 1 ) + { workshop_quit_form(); return; } @@ -1418,11 +1502,13 @@ void workshop_form_gui(void) * escapes here and we show them a basic string */ - if( workshop_form.op != k_workshop_op_none ){ + if( workshop_form.op != k_workshop_op_none ) + { const char *op_string = "The programmer has not bothered to describe " "the current operation that is running."; - switch( workshop_form.op ){ + switch( workshop_form.op ) + { case k_workshop_op_loading_model: op_string = "Operation in progress: Loading model file."; break; @@ -1437,7 +1523,7 @@ void workshop_form_gui(void) default: break; } - ui_text( panel, op_string, 1, k_ui_align_middle_center, 0 ); + ui_text( ctx, panel, op_string, 1, k_ui_align_middle_center, 0 ); return; } @@ -1469,14 +1555,17 @@ void workshop_form_gui(void) /* content page */ ui_rect_pad( content, (ui_px[2]){8,8} ); - if( stable_page == k_workshop_form_edit ){ - workshop_form_gui_edit_page( content ); + if( stable_page == k_workshop_form_edit ) + { + workshop_form_gui_edit_page( ctx, content ); } - else if( stable_page == k_workshop_form_open ){ - ui_text( content, "Nothing selected.", 1, k_ui_align_middle_center, - ui_colour( k_ui_fg+4 ) ); + else if( stable_page == k_workshop_form_open ) + { + ui_text( ctx, content, "Nothing selected.", 1, k_ui_align_middle_center, + ui_colour( ctx, k_ui_fg+4 ) ); } - else if( stable_page >= k_workshop_form_cclosing ){ + else if( stable_page >= k_workshop_form_cclosing ) + { ui_rect submission_row; ui_split( content, k_ui_axis_h, content[3]-32-8, 0, content, submission_row ); @@ -1484,11 +1573,11 @@ void workshop_form_gui(void) u32 colour; if( stable_page == k_workshop_form_closing_bad ) - colour = ui_colour( k_ui_red+k_ui_brighter ); + colour = ui_colour( ctx, k_ui_red+k_ui_brighter ); else - colour = ui_colour( k_ui_green+k_ui_brighter ); + colour = ui_colour( ctx, k_ui_green+k_ui_brighter ); - ui_text( content, workshop_form.failure_or_success_string, 1, + ui_text( ctx, content, workshop_form.failure_or_success_string, 1, k_ui_align_middle_center, colour ); ui_rect submission_center; @@ -1497,12 +1586,13 @@ void workshop_form_gui(void) ui_rect_center( submission_row, submission_center ); ui_rect_pad( submission_center, (ui_px[2]){8,8} ); - if( ui_button_text( submission_center, "OK", 1 ) == 1 ){ + if( ui_button_text( ctx, submission_center, "OK", 1 ) == 1 ) + { workshop_form.page = k_workshop_form_open; } } - workshop_form_gui_sidebar( sidebar ); + workshop_form_gui_sidebar( ctx, sidebar ); } /* diff --git a/workshop.h b/workshop.h index be9e3a5..08776df 100644 --- a/workshop.h +++ b/workshop.h @@ -131,4 +131,4 @@ int workshop_submit_command( int argc, const char *argv[] ); void async_workshop_get_filepath( void *data, u32 len ); void async_workshop_get_installed_files( void *data, u32 len ); void workshop_load_metadata( const char *path,struct workshop_file_info *info ); -void workshop_form_gui(void); +void workshop_form_gui( ui_context *ctx ); diff --git a/world_render.c b/world_render.c index 31fe1be..4cac23f 100644 --- a/world_render.c +++ b/world_render.c @@ -1350,20 +1350,21 @@ static f32 *skybox_prop_location( world_instance *world, i32 index ){ } } -void imgui_world_light_edit( world_instance *world ) +void imgui_world_light_edit( ui_context *ctx, world_instance *world ) { ui_rect panel = { vg.window_x-400, 0, 400, vg.window_y }; - ui_fill( panel, ui_colour( k_ui_bg+1 ) ); - ui_outline( panel, 1, ui_colour( k_ui_bg+7 ), 0 ); + ui_fill( ctx, panel, ui_colour( ctx, k_ui_bg+1 ) ); + ui_outline( ctx, panel, 1, ui_colour( ctx, k_ui_bg+7 ), 0 ); ui_rect_pad( panel, (ui_px[2]){ 8, 8 } ); - ui_capture_mouse(1); + ui_capture_mouse(ctx, 1); static i32 option_to_edit = 0; - ui_enum( panel, "option", skybox_setting_options, 5, &option_to_edit ); - ui_colourpicker( panel, "colour", + ui_enum( ctx, panel, "option", skybox_setting_options, 5, &option_to_edit ); + ui_colourpicker( ctx, panel, "colour", skybox_prop_location( world, option_to_edit ) ); - if( ui_button( panel, "save tweaker file ('/tmp/tweaker.txt')\n" ) == 1 ){ + if( ui_button( ctx, panel, "save tweaker file ('/tmp/tweaker.txt')\n" ) == 1 ) + { FILE *fp = fopen( "/tmp/tweaker.txt", "w" ); for( i32 i=0; i<5; i ++ ){ diff --git a/world_render.h b/world_render.h index 846e2d8..7645b26 100644 --- a/world_render.h +++ b/world_render.h @@ -88,7 +88,7 @@ void render_world_override( world_instance *world, vg_camera *cam, ent_spawn *dest_spawn, v4f map_info ); void render_world_gates( world_instance *world, vg_camera *cam ); -void imgui_world_light_edit( world_instance *world ); +void imgui_world_light_edit( ui_context *ctx, world_instance *world ); #define WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( WORLD, SHADER ) \ world_link_lighting_ub( WORLD, _shader_##SHADER.id ); \ diff --git a/world_routes_ui.c b/world_routes_ui.c index e367e66..0afbeae 100644 --- a/world_routes_ui.c +++ b/world_routes_ui.c @@ -12,7 +12,8 @@ static u32 v4_rgba( v4f colour ){ return r | (g<<8) | (b<<16) | (a<<24); } -static void ent_route_imgui( world_instance *world, ent_route *route, +static void ent_route_imgui( ui_context *ctx, + world_instance *world, ent_route *route, ui_point inout_cursor ){ if( route->flags & k_ent_route_flag_out_of_zone ) return; @@ -66,7 +67,8 @@ static void ent_route_imgui( world_instance *world, ent_route *route, h = route->factive * 16.0f, base = inout_cursor[0];//(f32)vg.window_x*0.5f - route->ui_stopper; - if( route->ui_residual > 0.0f ){ + if( route->ui_residual > 0.0f ) + { ui_px w = route->ui_residual_block_w, total = w + 4; @@ -80,23 +82,25 @@ static void ent_route_imgui( world_instance *world, ent_route *route, v4_copy( route->colour, fadecolour ); fadecolour[3] *= route->ui_residual; - ui_fill( rect, v4_rgba(fadecolour) ); + ui_fill( ctx, rect, v4_rgba(fadecolour) ); x += total; } int got_first = 0; - for( u32 i=0; ilength * 6.0f); ui_rect rect = { base+x, inout_cursor[1], w, h }; - ui_fill( rect, colour ); + ui_fill( ctx, rect, colour ); if( block->clean ) - ui_outline( rect, 1, 0xff00ffff, 0 ); + ui_outline( ctx, rect, 1, 0xff00ffff, 0 ); - if( block->best != 0.0f ){ + if( block->best != 0.0f ) + { char buf[32]; vg_str str; vg_strnull( &str, buf, 32 ); @@ -106,7 +110,8 @@ static void ent_route_imgui( world_instance *world, ent_route *route, s = floorf( as ), ds = floorf( vg_fractf( as ) * 10.0f ); - if( (block->best != 0.0f) && (fabsf(diff) > 0.001f) ){ + if( (block->best != 0.0f) && (fabsf(diff) > 0.001f) ) + { if( diff > 0.0f ) vg_strcatch( &str, '+' ); else @@ -116,7 +121,7 @@ static void ent_route_imgui( world_instance *world, ent_route *route, vg_strcatch( &str, '.' ); vg_strcati32( &str, ds ); - ui_text( rect, buf, 1, k_ui_align_middle_center, 0 ); + ui_text( ctx, rect, buf, 1, k_ui_align_middle_center, 0 ); } } @@ -128,15 +133,17 @@ static void ent_route_imgui( world_instance *world, ent_route *route, } } - for( u32 i=0; icheckpoints_count-valid_sections; i++ ){ + for( u32 i=0; icheckpoints_count-valid_sections; i++ ) + { struct time_block *block = &blocks[ i ]; ui_px w = 20; ui_rect rect = { base+x, inout_cursor[1], w, h }; - ui_outline( rect, -1, colour, 0 ); + ui_outline( ctx, rect, -1, colour, 0 ); x += w + 4; - if( !got_first ){ + if( !got_first ) + { route->ui_first_block_width = w; got_first = 1; } @@ -149,12 +156,13 @@ static void ent_route_imgui( world_instance *world, ent_route *route, vg.time_frame_delta ); } -void world_routes_imgui( world_instance *world ) +void world_routes_imgui( ui_context *ctx, world_instance *world ) { if( skaterift.activity == k_skaterift_menu ) return; ui_point cursor = { 4, 4 }; - for( u32 i=0; ient_route); i++ ){ - ent_route_imgui( world, mdl_arritm( &world->ent_route, i ), cursor ); + for( u32 i=0; ient_route); i++ ) + { + ent_route_imgui( ctx, world, mdl_arritm( &world->ent_route, i ), cursor ); } } diff --git a/world_routes_ui.h b/world_routes_ui.h index a821f7f..70c0fcd 100644 --- a/world_routes_ui.h +++ b/world_routes_ui.h @@ -2,4 +2,4 @@ #include "world_routes.h" struct route_ui{}; -void world_routes_imgui( world_instance *world ); +void world_routes_imgui( ui_context *ctx, world_instance *world ); -- 2.25.1