a mess but stable
[carveJwlIkooP6JGAAIwe30JlM.git] / player_replay.c
index 5a6323c9ee6be1fb1ba0dbe074a89ac147d92add..0db1ca4d665822b8251555d62b5289c412e89c97 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 */
-   vg_ui.wants_mouse = 0;
+   ui_capture_mouse( ctx, 0 );
    freecam_preupdate();
 
    if( vg_getkey(SDLK_q) )
@@ -854,16 +856,16 @@ static void replay_fly_edit_keyframe( replay_keyframe *kf )
    if( vg_getkey(SDLK_e) )
       player_replay.freecam_v[1] += vg.time_frame_delta*6.0f*20.0f;
 
-   v3_copy( player_replay.replay_freecam.pos, skaterift.cam.pos );
-   v3_copy( player_replay.replay_freecam.angles, skaterift.cam.angles);
-   skaterift.cam.fov = player_replay.replay_freecam.fov;
+   v3_copy( player_replay.replay_freecam.pos, g_render.cam.pos );
+   v3_copy( player_replay.replay_freecam.angles, g_render.cam.angles);
+   g_render.cam.fov = player_replay.replay_freecam.fov;
 
-   v3_copy( skaterift.cam.pos, kf->cam.pos );
-   v3_copy( skaterift.cam.angles, kf->cam.angles );
-   kf->cam.fov = skaterift.cam.fov;
+   v3_copy( g_render.cam.pos, kf->cam.pos );
+   v3_copy( g_render.cam.angles, kf->cam.angles );
+   kf->cam.fov = g_render.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;
-   vg_ui.wants_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)vg_ui.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, vg_ui.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, vg_ui.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] = vg_ui.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, vg_ui.mouse ) )
+         if( ui_inside_rect( dragbar, ctx->mouse ) )
          {
-            vg_ui.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, vg_ui.mouse ) )
+   if( ui_inside_rect( script, ctx->mouse ) )
    {
-      vg_ui.cursor = k_ui_cursor_hand;
+      ctx->cursor = k_ui_cursor_hand;
 
-      ui_rect cursor = { vg_ui.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 
          {
@@ -1131,9 +1135,9 @@ void skaterift_replay_imgui(void)
                &player_replay.keyframes[player_replay.keyframe_count++];
 
             kf->time = mouse_t;
-            v3_copy( skaterift.cam.pos, kf->cam.pos );
-            v3_copy( skaterift.cam.angles, kf->cam.angles );
-            kf->cam.fov = skaterift.cam.fov;
+            v3_copy( g_render.cam.pos, kf->cam.pos );
+            v3_copy( g_render.cam.angles, kf->cam.angles );
+            kf->cam.fov = g_render.cam.fov;
 
             replay_keyframe_sort();
          }
@@ -1142,27 +1146,27 @@ void skaterift_replay_imgui(void)
 
    /* timeline scrub */
    bool start_in_timeline = 
-      ui_clicking(UI_MOUSE_LEFT) && 
-      ui_inside_rect(timeline, vg_ui.mouse_click);
-   if( (ui_inside_rect( timeline, vg_ui.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 = { vg_ui.mouse[0], timeline[1], 4, timeline[3] };
-      ui_fill( cursor, ui_colour( k_ui_fg ) );
-      vg_ui.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, NULL ) )
+   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();