update for ui api
authorhgn <hgodden00@gmail.com>
Sun, 26 May 2024 13:58:02 +0000 (14:58 +0100)
committerhgn <hgodden00@gmail.com>
Sun, 26 May 2024 13:58:02 +0000 (14:58 +0100)
30 files changed:
gui.h
menu.c
menu.h
network.c
player.c
player.h
player_common.c
player_dead.c
player_dead.h
player_drive.c
player_drive.h
player_glide.c
player_glide.h
player_remote.c
player_remote.h
player_replay.c
player_replay.h
player_skate.c
player_skate.h
player_walk.c
player_walk.h
render.c
render.h
skaterift.c
workshop.c
workshop.h
world_render.c
world_render.h
world_routes_ui.c
world_routes_ui.h

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