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) )
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;
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;
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; i<argc; i++ ){
+ for( int i=0; i<argc; i++ )
+ {
vg_strcat( &str, argv[i] );
vg_strcat( &str, " " );
}
return 0;
}
-static int gui_showtrick_ccmd( int argc, const char *argv[] ){
- if( argc == 1 ){
+static int gui_showtrick_ccmd( int argc, const char *argv[] )
+{
+ if( argc == 1 )
+ {
gui_helper_clear();
vg_str text;
return 1;
}
-static void gui_draw_icon( enum gui_icon icon, v2f co, f32 size ){
+static void gui_draw_icon( enum gui_icon icon, v2f co, f32 size )
+{
if( gui.icon_draw_count == vg_list_size(gui.icon_draw_buffer) )
return;
return NULL;
}
-static void gui_init(void){
+static void gui_init(void)
+{
font3d_load( &gui.font, "models/rs_font.mdl", vg_mem.rtmemory );
vg_console_reg_cmd( "gui_location", gui_location_print_ccmd, NULL );
vg_console_reg_cmd( "showtrick", gui_showtrick_ccmd, NULL );
(menu.main_index == k_menu_main_map);
}
-static void menu_decor_select( ui_rect rect )
+static void menu_decor_select( ui_context *ctx, ui_rect rect )
{
- ui_context *ctx = ui_current_context();
ui_px b = ctx->font->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 |
*value = vg_clampf( *value, 0, 1 );
}
- menu_decor_select( rect );
+ menu_decor_select( ctx, rect );
state |= k_ui_button_hover;
}
else
}
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;
{
if( select )
{
- menu_decor_select( rect );
+ menu_decor_select( ctx, rect );
if( button_down( k_srbind_maccept ) )
state = k_ui_button_click;
}
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 )
{
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;
{
if( select )
{
- menu_decor_select( rect );
+ menu_decor_select( ctx, rect );
if( button_down( k_srbind_maccept ) )
{
}
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 )
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;
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;
}
menu.web_choice = 0;
}
-void menu_gui(void)
+void menu_gui( ui_context *ctx )
{
if( button_down( k_srbind_mopen ) )
{
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;
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 };
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 )
{
}
}
- if( menu_button( b, R==1, "Web Browser" ) )
+ if( menu_button( ctx, b, R==1, "Web Browser" ) )
{
char buf[512];
vg_str str;
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 );
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"
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;
}
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;
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 );
/* 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[] = {
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; i<vg_list_size(opts); i ++ )
{
- ui_rect box = { x, 0, ui_text_line_width(opts[i]) + 32, height };
+ ui_rect box = { x, 0, ui_text_line_width(ctx, opts[i]) + 32, height };
if( draw )
{
- enum ui_button_state state = ui_button_base( box );
+ enum ui_button_state state = ui_button_base( ctx, box );
if( state == k_ui_button_click )
{
- ui_fill( box, GUI_COL_DARK );
+ ui_fill( ctx, box, GUI_COL_DARK );
menu.main_index = i;
}
else if( state == k_ui_button_holding_inside )
{
- ui_fill( box, GUI_COL_DARK );
+ ui_fill( ctx, box, GUI_COL_DARK );
}
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_NORM );
- ui_outline( box, 1, GUI_COL_ACTIVE, 0 );
+ ui_fill( ctx, box, GUI_COL_NORM );
+ ui_outline( ctx, box, 1, GUI_COL_ACTIVE, 0 );
}
else
- ui_fill( box, i==menu.main_index? GUI_COL_ACTIVE: GUI_COL_NORM );
+ ui_fill( ctx, box,
+ i==menu.main_index? GUI_COL_ACTIVE: GUI_COL_NORM );
- ui_text( box, opts[i], 1, k_ui_align_middle_center, 0 );
+ ui_text( ctx, box, opts[i], 1, k_ui_align_middle_center, 0 );
}
x += box[2] + spacer;
if( draw )
{
ui_rect inf_rb = { x, 0, 32, height };
- ui_fill( inf_rb, rb_down? GUI_COL_NORM: GUI_COL_NORM );
- ui_text( inf_rb, "\x92", 1, k_ui_align_middle_center, 0 );
+ ui_fill( ctx, inf_rb, rb_down? GUI_COL_NORM: GUI_COL_NORM );
+ ui_text( ctx, inf_rb, "\x92", 1, k_ui_align_middle_center, 0 );
}
x += 32;
}
if( draw )
- ui_fill( (ui_rect){ x+8,0, vg.window_x-(x+8),height }, GUI_COL_NORM );
+ ui_fill( ctx,
+ (ui_rect){ x+8,0, vg.window_x-(x+8),height }, GUI_COL_NORM );
else
{
x = vg.window_x/2 - x/2;
- ui_fill( (ui_rect){ 0, 0, x-8, height }, GUI_COL_NORM );
+ ui_fill( ctx,
+ (ui_rect){ 0, 0, x-8, height }, GUI_COL_NORM );
}
}
if( menu.main_index == k_menu_main_map )
{
menu.bg_blur = 0;
- ui_font_face( &vgf_default_large );
- ui_rect title = { vg.window_x/2 - 512/2, height+8, 512, 64 };
+ ctx->font = &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];
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;
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;
{
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} );
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));
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; j<mdl_arrcount(&world->ent_challenge); j ++ )
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;
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];
{
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();
}
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"
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 )
{
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"
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(
}
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(
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;
}
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);
{
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 };
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;
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 ];
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;
}
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;
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; i<k_world_max; i++ ){
+ for( u32 i=0; i<k_world_max; i++ )
+ {
if( world_static.instance_addons[ i ] )
addon_alias_uid( &world_static.instance_addons[ i ]->alias, 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 )
#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,
*/
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 );
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);
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;
localplayer.cam_velocity_influence = 1.0f;
}
-void player__dead_im_gui(void)
+void player__dead_im_gui( ui_context *ctx )
{
}
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 );
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)
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);
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] );
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 );
/*
* 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)))
{
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 );
}
}
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";
{ k_ESteamNetworkingConnectionState_Linger, "Linger" },
{ k_ESteamNetworkingConnectionState_Dead, "Dead" }
};
- for( u32 i=0; i<vg_list_size(states); i ++ ){
- if( states[i].state == network_client.state ){
+ for( u32 i=0; i<vg_list_size(states); i ++ )
+ {
+ if( states[i].state == network_client.state )
+ {
netstatus = states[i].str;
break;
}
}
snprintf( buf, 512, "Network: %s", netstatus );
- ui_info( panel, buf );
- ui_info( panel, "---------------------" );
+ ui_info( ctx, panel, buf );
+ ui_info( ctx, panel, "---------------------" );
- if( network_client.state == k_ESteamNetworkingConnectionState_Connected ){
- ui_info( panel, "#-1: localplayer" );
+ if( network_client.state == k_ESteamNetworkingConnectionState_Connected )
+ {
+ ui_info( ctx, panel, "#-1: localplayer" );
snprintf( buf, 512, "U%.3f/D%.3fkbs",
netplayers.up_kbs, netplayers.down_kbs );
- ui_info( panel, buf );
+ ui_info( ctx, panel, buf );
- for( u32 i=0; i<vg_list_size(netplayers.list); i++ ){
+ for( u32 i=0; i<vg_list_size(netplayers.list); i++ )
+ {
struct network_player *player = &netplayers.list[i];
- if( player->active ){
+ 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" );
}
}
/*
* 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;
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
#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 ++;
}
}
-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,
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 );
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 &&
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; i<NETWORK_MAX_PLAYERS; i ++ ){
+ for( u32 i=0; i<NETWORK_MAX_PLAYERS; i ++ )
+ {
struct network_player *player = &netplayers.list[i];
if( !player->active || player->isblocked ) continue;
}
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; i<NETWORK_MAX_PLAYERS; i++ ){
+ for( u32 i=0; i<NETWORK_MAX_PLAYERS; i++ )
+ {
struct network_player *player = &netplayers.list[i];
- if( player->active ){
+ if( player->active )
+ {
v3f co;
remote_player_position( i, co );
(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 */
}
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;
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;
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 );
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,
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; i<k_replay_framedata_rows; i++ ){
- player__debugtext( 1, "[%u]: [%hu, %hu]\n", i,
+ if( replay->statehead )
+ {
+ for( u32 i=0; i<k_replay_framedata_rows; i++ )
+ {
+ player__debugtext( ctx, 1, "[%u]: [%hu, %hu]\n", i,
replay->statehead->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;
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 )
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 );
}
/* move freecam */
- ui_capture_mouse(0);
+ ui_capture_mouse( ctx, 0 );
freecam_preupdate();
if( vg_getkey(SDLK_q) )
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;
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;
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 )
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 */
{
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 )
{
/* 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;
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 )
{
}
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;
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; j<player_replay.keyframe_count-1; j ++ )
player_replay.keyframes[j] = player_replay.keyframes[j+1];
k_ui_button_holding_outside |
k_ui_button_click;
- if( ui_button_text( btn1, "E", 1 ) & mask_using )
+ if( ui_button_text( ctx, btn1, "E", 1 ) & mask_using )
{
- replay_fly_edit_keyframe( kf );
- ui_set_mouse_pos( btn1[0]+8, btn1[1]+8 );
+ replay_fly_edit_keyframe( ctx, kf );
+ vg_ui_set_mouse_pos( btn1[0]+8, btn1[1]+8 );
}
}
}
- ui_fill( tag, ui_colour(k_ui_blue) );
+ ui_fill( ctx, tag, ui_colour( ctx, k_ui_blue ) );
lx = x;
}
/* adding keyframes */
- if( ui_inside_rect( script, g_ui_ctx->mouse ) )
+ 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
{
/* 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;
}
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();
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);
}
}
-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] );
"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],
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 );
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,
}
-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",
"odrop_in",
"oregular" }
[w->state.activity] );
- player__debugtext( 1, "surface: %s\n",
+ player__debugtext( ctx, 1, "surface: %s\n",
(const char *[]){ "concrete",
"wood",
"grass",
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);
#include "render.h"
+#include "vg/vg_engine.h"
+#include "vg/vg_platform.h"
struct framebuffer framebuffers[] =
{
/*
* 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;
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 );
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 } );
}
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 );
}
}
-
#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"
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;
/*
* 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;
/*
* 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;
*/
static void workshop_form_async_imageload( void *data, u32 len )
{
- if( data ){
+ if( data )
+ {
struct framebuffer_attachment *a =
&gpipeline.fb_workshop_preview->attachments[0];
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;
}
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 );
}
}
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;
}
*/
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;
workshop_form.published_files_list_length = count;
ISteamUGC *hSteamUGC = SteamAPI_SteamUGC();
- for( int i=0; i<count; i ++ ){
+ for( int i=0; i<count; i ++ )
+ {
struct published_file *pfile = &workshop_form.published_files_list[i];
SteamUGCDetails_t details;
start+i,
&details ) )
{
- if( details.m_eResult != k_EResultOK ){
+ if( details.m_eResult != k_EResultOK )
+ {
snprintf( pfile->title, 80, "Error (%d)", details.m_eResult );
}
- else{
+ else
+ {
vg_strncpy( details.m_rgchTitle, pfile->title, 80,
k_strncpy_always_add_null );
}
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)" );
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" );
}
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;
*/
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;
}
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 );
/*
* 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 );
/*
* 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;
}
* -----------------------------------------------------------------------------
*/
-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;
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 );
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 ){
}
}
}
- 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;
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);
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;
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 )
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 );
}
}
}
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 );
}
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;
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,
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 );
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;
}
/*
* 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;
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;
workshop_form.page = k_workshop_form_edit;
}
- for( int i=0; i<workshop_form.published_files_list_length; i++ ){
+ for( int i=0; i<workshop_form.published_files_list_length; i++ )
+ {
ui_rect item;
ui_split( sidebar, k_ui_axis_h, 28, 0, item, sidebar );
ui_rect_pad( item, (ui_px[2]){4,4} );
struct published_file *pfile = &workshop_form.published_files_list[i];
- if( ui_button_text( item, pfile->title, 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;
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;
}
* 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;
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;
}
/* 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 );
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;
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 );
}
/*
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 );
}
}
-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 ++ ){
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 ); \
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;
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;
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; i<valid_sections; i ++ ){
+ for( u32 i=0; i<valid_sections; i ++ )
+ {
struct time_block *block = &blocks[ i ];
ui_px w = 20 + (block->length * 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 );
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
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 );
}
}
}
}
- for( u32 i=0; i<route->checkpoints_count-valid_sections; i++ ){
+ for( u32 i=0; i<route->checkpoints_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;
}
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; i<mdl_arrcount(&world->ent_route); i++ ){
- ent_route_imgui( world, mdl_arritm( &world->ent_route, i ), cursor );
+ for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ )
+ {
+ ent_route_imgui( ctx, world, mdl_arritm( &world->ent_route, i ), cursor );
}
}
#include "world_routes.h"
struct route_ui{};
-void world_routes_imgui( world_instance *world );
+void world_routes_imgui( ui_context *ctx, world_instance *world );