[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",
};
[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 )
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) );
* --------------------------------------------*/
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 ) )
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 ],
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 );
}
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 );
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 ) )
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 );
}
}
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 */
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 /
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;
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);
"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"
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;
op;
f32 time_rate;
- camera cam, replay_cam;
+ camera cam;
replay_buffer replay;
replay_frame *resume_target;
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,