X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_replay.c;h=0db1ca4d665822b8251555d62b5289c412e89c97;hb=refs%2Fheads%2Fmenu2;hp=5a6323c9ee6be1fb1ba0dbe074a89ac147d92add;hpb=494c85703c76c4123c49937a32584840b6be1470;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_replay.c b/player_replay.c index 5a6323c..0db1ca4 100644 --- a/player_replay.c +++ b/player_replay.c @@ -784,9 +784,9 @@ void skaterift_replay_init(void) replay_clear( &player_replay.local ); } -void skaterift_replay_debug_info(void) +void skaterift_replay_debug_info( ui_context *ctx ) { - player__debugtext( 2, "replay info" ); + player__debugtext( ctx, 2, "replay info" ); replay_buffer *replay = &player_replay.local; u32 head = 0, @@ -794,21 +794,23 @@ void skaterift_replay_debug_info(void) if( replay->tail ) tail = (void *)replay->tail - replay->data; if( replay->head ) head = (void *)replay->head - replay->data; - player__debugtext( 1, "head @%u | tail @%u\n", head, tail ); + player__debugtext( ctx, 1, "head @%u | tail @%u\n", head, tail ); - if( replay->statehead ){ - for( u32 i=0; istatehead ) + { + for( u32 i=0; istatehead->data_table[i][0], replay->statehead->data_table[i][1] ); } u32 state = (void *)replay->statehead - replay->data; - player__debugtext( 1, "gs @%u\n", state ); - player__debugtext( 1, "gamestate_size: %hu\n", + player__debugtext( ctx, 1, "gs @%u\n", state ); + player__debugtext( ctx, 1, "gamestate_size: %hu\n", replay->statehead->data_table[k_replay_framedata_gamestate][1] ); } else - player__debugtext( 1, "gs @NULL\n" ); + player__debugtext( ctx, 1, "gs @NULL\n" ); f64 start = replay->cursor, end = replay->cursor; @@ -818,7 +820,7 @@ void skaterift_replay_debug_info(void) f64 cur = replay->cursor - start, len = end - start; - player__debugtext( 1, "cursor: %.2fs / %.2fs\n", cur, len ); + player__debugtext( ctx, 1, "cursor: %.2fs / %.2fs\n", cur, len ); } static int _keyframe_cmp( const void *p1, const void *p2 ) @@ -833,9 +835,9 @@ static void replay_keyframe_sort(void) sizeof(replay_keyframe), _keyframe_cmp ); } -static void replay_fly_edit_keyframe( replay_keyframe *kf ) +static void replay_fly_edit_keyframe( ui_context *ctx, replay_keyframe *kf ) { - if( ui_click_down( UI_MOUSE_LEFT ) ) + if( ui_click_down( ctx, UI_MOUSE_LEFT ) ) { /* init freecam */ v3_copy( kf->cam.pos, player_replay.replay_freecam.pos ); @@ -846,7 +848,7 @@ static void replay_fly_edit_keyframe( replay_keyframe *kf ) } /* move freecam */ - 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; jmouse ) ) { - 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();