From: hgn Date: Sat, 15 Jul 2023 22:57:56 +0000 (+0100) Subject: add freecam X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=f48c3935c01da796b7ecb011a42d6576788b7648;hp=721322812d9fcfa648268aab34ec1879c9414dfe;p=carveJwlIkooP6JGAAIwe30JlM.git add freecam --- diff --git a/input.h b/input.h index 4c31d00..c5ce1e4 100644 --- a/input.h +++ b/input.h @@ -135,7 +135,7 @@ static const char *button_display_string( enum sr_bind button ) [k_srbind_mback] = "\xa3", [k_srbind_maccept]= "\xa2", [k_srbind_mopen] = "\xa3" , -[k_srbind_replay_play]= KEYBOARD_GLYPH( "E" ), +[k_srbind_replay_play]= KEYBOARD_GLYPH( "G" ), [k_srbind_replay_freecam] = KEYBOARD_GLYPH( "F" ), [k_srbind_replay_resume]= "\xa1", }; @@ -152,14 +152,14 @@ static const char *axis_display_string( enum sr_axis axis ) [k_sraxis_grab] = "\x90", [k_sraxis_mbrowse_h] = "\x88", [k_sraxis_mbrowse_v] = "\x89", - [k_sraxis_replay_h] = "\x88" + [k_sraxis_replay_h] = "\x8f\x90" }; const char *keyboard_table[ k_sraxis_max ] = { [k_sraxis_grab] = "\x9e", [k_sraxis_mbrowse_h] = KEYBOARD_GLYPH("\x93")KEYBOARD_GLYPH("\x95"), [k_sraxis_mbrowse_v] = KEYBOARD_GLYPH("\x96")KEYBOARD_GLYPH("\x94"), - [k_sraxis_replay_h] = KEYBOARD_GLYPH("A")KEYBOARD_GLYPH("D"), + [k_sraxis_replay_h] = KEYBOARD_GLYPH("Q")KEYBOARD_GLYPH("E"), }; if( vg_input.display_input_method == k_input_method_controller ) @@ -293,7 +293,7 @@ static void skaterift_preupdate_inputs(void) setbtn( k_srbind_maccept, vg_getkey(SDLK_e) ); setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN)); setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN2)); - setbtn( k_srbind_replay_play, vg_getkey(SDLK_e) ); + setbtn( k_srbind_replay_play, vg_getkey(SDLK_g) ); setbtn( k_srbind_replay_freecam, vg_getkey(SDLK_f) ); setbtn( k_srbind_replay_resume, vg_getkey(SDLK_SPACE) ); @@ -301,14 +301,15 @@ static void skaterift_preupdate_inputs(void) * --------------------------------------------*/ srinput.axis_states[ k_sraxis_grab ][0] = vg_getkey( SDLK_LSHIFT ); - if( vg_getkey( SDLK_d ) ) { - srinput.joystick_states[k_srjoystick_steer][0][0] += 1.0f; + if( vg_getkey( SDLK_e ) ) srinput.axis_states[ k_sraxis_replay_h ][0] += 1.0f; - } - if( vg_getkey( SDLK_a ) ) { - srinput.joystick_states[k_srjoystick_steer][0][0] -= 1.0f; + if( vg_getkey( SDLK_q ) ) srinput.axis_states[ k_sraxis_replay_h ][0] -= 1.0f; - } + + if( vg_getkey( SDLK_d ) ) + srinput.joystick_states[k_srjoystick_steer][0][0] += 1.0f; + if( vg_getkey( SDLK_a ) ) + srinput.joystick_states[k_srjoystick_steer][0][0] -= 1.0f; if( vg_getkey( SDLK_w ) ) srinput.joystick_states[k_srjoystick_steer][0][1] -= 1.0f; if( vg_getkey( SDLK_s ) ) @@ -369,7 +370,8 @@ static void skaterift_preupdate_inputs(void) axisgrab[0] += vg_maxf( 0.0f, axis[ SDL_CONTROLLER_AXIS_TRIGGERRIGHT ] ); axisbrowseh[0] += axis[ SDL_CONTROLLER_AXIS_LEFTX ]; axisbrowsev[0] += axis[ SDL_CONTROLLER_AXIS_LEFTY ]; - axisreplayh[0] += axis[ SDL_CONTROLLER_AXIS_LEFTX ]; + axisreplayh[0] += vg_maxf(0.0f,axis[SDL_CONTROLLER_AXIS_TRIGGERRIGHT]); + axisreplayh[0] -= vg_maxf(0.0f,axis[SDL_CONTROLLER_AXIS_TRIGGERLEFT]); float lh = axis[ SDL_CONTROLLER_AXIS_LEFTX ], lv = axis[ SDL_CONTROLLER_AXIS_LEFTY ], diff --git a/player_common.c b/player_common.c index 8314048..270f40e 100644 --- a/player_common.c +++ b/player_common.c @@ -264,27 +264,24 @@ VG_STATIC void player__cam_iterate( player_instance *player ){ player_camera_portal_correction( player ); } -VG_STATIC void player_look( player_instance *player, v3f angles ) -{ +VG_STATIC void player_look( v3f angles, float speed ){ if( vg_ui.wants_mouse ) return; - float sensitivity = skaterift.time_rate; - angles[2] = 0.0f; v2f mouse_input; v2_copy( vg.mouse_delta, mouse_input ); if( k_invert_y ) mouse_input[1] *= -1.0f; - v2_muladds( angles, mouse_input, 0.0025f * sensitivity, angles ); + v2_muladds( angles, mouse_input, 0.0025f * speed, angles ); v2f jlook; joystick_state( k_srjoystick_look, jlook ); - angles[0] += jlook[0] * vg.time_delta * 4.0f * sensitivity; - float input_y = jlook[1] * vg.time_delta * 4.0f; + angles[0] += jlook[0] * vg.time_frame_delta * 4.0f * speed; + float input_y = jlook[1] * vg.time_frame_delta * 4.0f; if( k_invert_y ) input_y *= -1.0f; - angles[1] += input_y * sensitivity; + angles[1] += input_y * speed; angles[1] = vg_clampf( angles[1], -VG_PIf*0.5f, VG_PIf*0.5f ); } diff --git a/player_common.h b/player_common.h index e4f332b..529fc84 100644 --- a/player_common.h +++ b/player_common.h @@ -13,7 +13,7 @@ static float static i32 k_player_debug_info = 0; static ui_rect g_player_debugger; -VG_STATIC void player_look( player_instance *player, v3f angles ); +VG_STATIC void player_look( v3f angles, float speed ); VG_STATIC void player__cam_iterate( player_instance *player ); VG_STATIC void player_vector_angles( v3f angles, v3f v, float C, float k ); struct player_board *player_get_player_board( struct player_instance *player ); diff --git a/player_replay.c b/player_replay.c index 62c2b2e..5313f93 100644 --- a/player_replay.c +++ b/player_replay.c @@ -421,6 +421,12 @@ VG_STATIC void skaterift_replay_pre_update(void){ else { if( button_down( k_srbind_replay_play ) ) skaterift.replay_control = k_replay_control_play; + if( button_down( k_srbind_replay_freecam ) ){ + skaterift.freecam = skaterift.freecam ^ 0x1; + + if( skaterift.freecam ) + replay_get_camera( &skaterift.replay, &skaterift.replay_freecam ); + } f32 target_speed = axis_state( k_sraxis_replay_h ) * 5.0; if( button_press( k_srbind_reset ) ) @@ -442,16 +448,82 @@ VG_STATIC void skaterift_replay_pre_update(void){ replay_seek( &skaterift.replay, target ); } - if( button_down( k_srbind_replay_resume ) ){ - skaterift_replay_resume(); - } - else if( button_down( k_srbind_mback ) ){ + if( button_down( k_srbind_mback ) ){ if( skaterift.replay.statehead ) skaterift_restore_frame( skaterift.replay.statehead ); else skaterift.activity = k_skaterift_default; srinput.enabled = 0; } + + gui_helper_action( button_display_string(k_srbind_replay_play), "play" ); + gui_helper_action( axis_display_string(k_sraxis_replay_h), "scrub" ); + if( skaterift.freecam ){ + gui_helper_action( button_display_string(k_srbind_replay_freecam), + "exit freecam" ); + + camera *cam = &skaterift.replay_freecam; + v3f angles; + v3_copy( cam->angles, angles ); + player_look( angles, 1.0f ); + + f32 decay = vg_maxf(0.0f,1.0f-vg.time_frame_delta*10.0f); + + v3f d; + v3_sub( angles, cam->angles, d ); + v3_muladds( skaterift.freecam_w, d, 20.0f, skaterift.freecam_w ); + v3_muls( skaterift.freecam_w, decay, skaterift.freecam_w ); + v3_muladds( cam->angles, skaterift.freecam_w, vg.time_frame_delta, + cam->angles ); + cam->angles[1] = vg_clampf( cam->angles[1], -VG_PIf*0.5f,VG_PIf*0.5f); + + camera_update_transform( cam ); + + v3f lookdir = { 0.0f, 0.0f, -1.0f }, + sidedir = { 1.0f, 0.0f, 0.0f }; + + m3x3f mtx; + m3x3_mul( cam->transform, localplayer.basis, mtx ); + + m3x3_mulv( mtx, lookdir, lookdir ); + m3x3_mulv( mtx, sidedir, sidedir ); + + v2f input; + joystick_state( k_srjoystick_steer, input ); + v2_muls( input, vg.time_frame_delta*6.0f*20.0f, input ); + + v3_muladds( skaterift.freecam_v, lookdir, -input[1], + skaterift.freecam_v ); + v3_muladds( skaterift.freecam_v, sidedir, input[0], + skaterift.freecam_v ); + + v3_muls( skaterift.freecam_v, decay, skaterift.freecam_v ); + v3_muladds( cam->pos, + skaterift.freecam_v, vg.time_frame_delta, cam->pos ); + } + else { + gui_helper_action( button_display_string(k_srbind_replay_resume), + "resume" ); + gui_helper_action( button_display_string(k_srbind_replay_freecam), + "enter freecam" ); + + if( button_down( k_srbind_replay_resume ) ){ + skaterift_replay_resume(); + } + } + } +} + +VG_STATIC void skaterift_get_replay_camera( camera *cam ){ + if( skaterift.freecam ){ + cam->nearz = 0.1f; + cam->farz = 100.0f; + v3_copy( skaterift.replay_freecam.pos, cam->pos ); + v3_copy( skaterift.replay_freecam.angles, cam->angles ); + cam->fov = skaterift.replay_freecam.fov; + } + else{ + replay_get_camera( &skaterift.replay, &skaterift.cam ); } } @@ -556,10 +628,6 @@ VG_STATIC void skaterift_replay_imgui(void){ ui_rect info = { 0, vg.window_y-bar[3]-128, 256, 128 }; ui_text( info, buf, 2,0,0 ); #endif - - gui_helper_action( axis_display_string(k_sraxis_replay_h), "scrub" ); - gui_helper_action( button_display_string(k_srbind_replay_resume), "resume" ); - gui_helper_action( button_display_string(k_srbind_replay_play), "play" ); } #endif /* PLAYER_REPLAY_C */ diff --git a/player_walk.c b/player_walk.c index b37095d..e0cdbec 100644 --- a/player_walk.c +++ b/player_walk.c @@ -256,7 +256,7 @@ VG_STATIC void player__walk_pre_update( player_instance *player ) struct player_walk *w = &player->_walk; if( !player->immobile ) - player_look( player, player->angles ); + player_look( player->angles, skaterift.time_rate ); if( w->state.outro_anim ){ float outro_length = (float)w->state.outro_anim->length / diff --git a/server.c b/server.c index a441573..270e916 100644 --- a/server.c +++ b/server.c @@ -394,17 +394,6 @@ int main( int argc, char *argv[] ) client_pollgroup = SteamAPI_ISteamNetworkingSockets_CreatePollGroup( hSteamNetworkingSockets ); -#if 0 - HTTPRequestHandle test_req = SteamAPI_ISteamHTTP_CreateHTTPRequest( - hSteamHTTP, k_EHTTPMethodGET, - "https://www.harrygodden.com/hello.txt" ); - - vg_steam_async_call *call1 = vg_alloc_async_steam_api_call(); - call1->userdata = NULL; - call1->p_handler = recieve_http; - SteamAPI_ISteamHTTP_SendHTTPRequest( hSteamHTTP, test_req, &call1->id ); -#endif - u64 server_ticks = 8000, last_record_save = 8000, last_scoreboard_gen = 0; diff --git a/shaders/blitblur.fs b/shaders/blitblur.fs index 7f08b4f..8de9e67 100644 --- a/shaders/blitblur.fs +++ b/shaders/blitblur.fs @@ -26,11 +26,11 @@ vec3 digital_noise( uvec3 iuv ){ void main(){ vec2 vuv = aUv; - if( uGlitchStrength > 0.0 ){ - uvec3 p = uvec3( gl_FragCoord.xy, uint(uTime*30.0) ); - vec2 g = digital_noise(p).xy; - vuv = aUv + g.xy*uGlitchStrength - uGlitchStrength*0.5; - } + //if( uGlitchStrength > 0.0 ){ + // uvec3 p = uvec3( gl_FragCoord.xy, uint(uTime*30.0) ); + // vec2 g = digital_noise(p).xy; + // vuv = aUv + g.xy*uGlitchStrength - uGlitchStrength*0.5; + //} vec2 vrand = rand_hash22( vuv ) * 2.0 - vec2(1.0); vec2 vrand1 = rand_hash22( vrand ) * 2.0 - vec2(1.0); diff --git a/shaders/blitblur.h b/shaders/blitblur.h index 7d95dcc..ac8f3cc 100644 --- a/shaders/blitblur.h +++ b/shaders/blitblur.h @@ -52,11 +52,11 @@ static struct vg_shader _shader_blitblur = { "void main(){\n" " vec2 vuv = aUv; \n" "\n" -" if( uGlitchStrength > 0.0 ){\n" -" uvec3 p = uvec3( gl_FragCoord.xy, uint(uTime*30.0) );\n" -" vec2 g = digital_noise(p).xy;\n" -" vuv = aUv + g.xy*uGlitchStrength - uGlitchStrength*0.5;\n" -" }\n" +" //if( uGlitchStrength > 0.0 ){\n" +" // uvec3 p = uvec3( gl_FragCoord.xy, uint(uTime*30.0) );\n" +" // vec2 g = digital_noise(p).xy;\n" +" // vuv = aUv + g.xy*uGlitchStrength - uGlitchStrength*0.5;\n" +" //}\n" "\n" " vec2 vrand = rand_hash22( vuv ) * 2.0 - vec2(1.0);\n" " vec2 vrand1 = rand_hash22( vrand ) * 2.0 - vec2(1.0);\n" diff --git a/skaterift.c b/skaterift.c index 3481112..9781920 100644 --- a/skaterift.c +++ b/skaterift.c @@ -457,7 +457,7 @@ VG_STATIC void skaterift_composite_maincamera(void){ vg_smoothstepf(global_skateshop.factive), &skaterift.cam ); if( skaterift.activity == k_skaterift_replay ){ - replay_get_camera( &skaterift.replay, &skaterift.cam ); + skaterift_get_replay_camera( &skaterift.cam ); } skaterift.cam.nearz = 0.1f; diff --git a/skaterift.h b/skaterift.h index 1aa3c51..17ed8f8 100644 --- a/skaterift.h +++ b/skaterift.h @@ -26,7 +26,7 @@ struct{ op; f32 time_rate; - camera cam, replay_cam; + camera cam; replay_buffer replay; replay_frame *resume_target; @@ -41,6 +41,10 @@ struct{ replay_control; f32 track_velocity; + camera replay_freecam; + int freecam; + v3f freecam_v, freecam_w; + enum skaterift_activity { k_skaterift_default = 0x00, k_skaterift_replay = 0x01,