#include "player_replay.h"
#include "input.h"
+#include "gui.h"
VG_STATIC void replay_clear( replay_buffer *replay ){
replay->head = NULL;
/* mainbar */
ui_px height = 32,
cwidth = 2;
- ui_rect bar = { 0, vg.window_y - height, vg.window_x, height };
+ ui_rect bar = { 0, 0, vg.window_x, height };
ui_fill( bar, ui_colour( k_ui_bg ) );
/* cursor frame block */
if( replay->cursor_frame->r ){
f64 l = (replay->cursor_frame->r->time-replay->cursor_frame->time)/len,
s = (replay->cursor_frame->time - start) / len;
- ui_rect box = { s*(f64)vg.window_x, bar[1]-2,
+ ui_rect box = { s*(f64)vg.window_x, 0,
VG_MAX(4,(ui_px)(l*vg.window_x)), bar[3]+2 };
ui_fill( box, ui_colour( k_ui_bg+4 ) );
}
}
/* cursor */
- ui_rect cusor = { cur * (f64)vg.window_x - (cwidth/2), bar[1],
+ ui_rect cusor = { cur * (f64)vg.window_x - (cwidth/2), 0,
cwidth, bar[3] };
ui_fill( cusor, ui_colour( 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, bar[1]-8, 2, bar[3]+8 };
+ ui_rect tag = { t*(f64)vg.window_x, 0, 2, bar[3]+8 };
ui_fill( tag, ui_colour( k_ui_green+k_ui_brighter ) );
}
replay_frame *prev = replay_find_recent_stateframe( replay );
if( prev ){
f64 t = (prev->time - start) / len;
- ui_rect tag = { t*(f64)vg.window_x, bar[1]-8, 2, bar[3]+8 };
+ ui_rect tag = { t*(f64)vg.window_x, 0, 2, bar[3]+8 };
ui_fill( tag, ui_colour( k_ui_yellow+k_ui_brighter ) );
}
ui_text( bar, buffer, 1, k_ui_align_middle_left, 0 );
ui_text( bar, "0s", 1, k_ui_align_middle_right, 0 );
- ui_rect info = { 0, vg.window_y-bar[3]-64, 128, 64 };
- if( vg_input.display_input_method == k_input_method_controller )
- ui_text( info, "scrub: <- LS ->\nresume:LB\nplay: A", 1,0,0 );
- else
- ui_text( info, "scrub: <- ->\nresume:R\nplay: space", 1,0,0 );
+#if 0
+ char buf[256];
+ snprintf( buf, 256, "scrub: %s\nresume: %s\nplay: %s\n",
+ axis_display_string( k_sraxis_replay_h ),
+ button_display_string( k_srbind_replay_resume ),
+ button_display_string( k_srbind_replay_play ) );
+
+ 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 */
}
if( best ){
- v3_copy( best->n, s->land_normal );
+ v3_copy( best->n, s->state.land_normal );
v3_copy( best->v, player->rb.v );
- s->land_dist = best->land_dist;
+ s->state.land_dist = best->land_dist;
s->state.gravity_bias = best->gravity;
joystick_state( k_srjoystick_steer, steer );
v2_normalize_clamp( steer );
- if( (fabsf(steer[1]) > 0.5f) && (s->land_dist >= 1.5f) ){
- s->state.flip_rate = (1.0f/s->land_dist) * vg_signf(steer[1]) *
+ if( (fabsf(steer[1]) > 0.5f) && (s->state.land_dist >= 1.5f) ){
+ s->state.flip_rate = (1.0f/s->state.land_dist) * vg_signf(steer[1]) *
s->state.reverse ;
s->state.flip_time = 0.0f;
v3_copy( player->rb.to_world[0], s->state.flip_axis );
}
}
else{
- v3_copy( player->basis[1], s->land_normal );
+ v3_copy( player->basis[1], s->state.land_normal );
}
}
if( s->state.activity_prev > k_skate_activity_air_to_grind )
player__approximate_best_trajectory( player );
- float angle = v3_dot( player->rb.to_world[1], s->land_normal );
+ float angle = v3_dot( player->rb.to_world[1], s->state.land_normal );
angle = vg_clampf( angle, -1.0f, 1.0f );
v3f axis;
- v3_cross( player->rb.to_world[1], s->land_normal, axis );
+ v3_cross( player->rb.to_world[1], s->state.land_normal, axis );
v4f correction;
q_axis_angle( correction, axis,
t = sign * (1.0f-t*t);
float angle = vg_clampf( t, -1.0f, 1.0f ) * VG_TAUf,
- distm = s->land_dist * fabsf(s->state.flip_rate) * 3.0f,
+ distm = s->state.land_dist * fabsf(s->state.flip_rate) * 3.0f,
blend = vg_clampf( 1.0f-distm, 0.0f, 1.0f );
angle = vg_lerpf( angle, vg_signf(s->state.flip_rate) * VG_TAUf, blend );
v4f smoothed_rotation;
+ float land_dist;
+ v3f land_normal;
+
/* animator controls which require persistence */
v3f board_trick_residualv,
board_trick_residuald;
possible_jumps[36];
u32 possible_jump_count;
- float land_dist;
- v3f land_normal;
-
v3f surface_picture,
weight_distribution,
grind_vec,
uniform vec2 uOverrideDir;
uniform float uTime;
uniform float uGlitchStrength;
+uniform vec2 uClampUv;
in vec2 aUv;
vec2 vdir = texture( uTexMotion, vuv ).xy * uBlurStrength + uOverrideDir;
- vec4 vcolour0 = texture( uTexMain, vuv + vdir*vrand.x );
- vec4 vcolour1 = texture( uTexMain, vuv + vdir*vrand.y );
- vec4 vcolour2 = texture( uTexMain, vuv + vdir*vrand1.x );
- vec4 vcolour3 = texture( uTexMain, vuv + vdir*vrand1.y );
+ vec4 vcolour0 = texture( uTexMain, min(vuv + vdir*vrand.x,uClampUv) );
+ vec4 vcolour1 = texture( uTexMain, min(vuv + vdir*vrand.y,uClampUv) );
+ vec4 vcolour2 = texture( uTexMain, min(vuv + vdir*vrand1.x,uClampUv) );
+ vec4 vcolour3 = texture( uTexMain, min(vuv + vdir*vrand1.y,uClampUv) );
FragColor = ( vcolour0 + vcolour1 + vcolour2 + vcolour3 ) * 0.25;
}
"uniform vec2 uOverrideDir;\n"
"uniform float uTime;\n"
"uniform float uGlitchStrength;\n"
+"uniform vec2 uClampUv;\n"
"\n"
"in vec2 aUv;\n"
"\n"
" \n"
" vec2 vdir = texture( uTexMotion, vuv ).xy * uBlurStrength + uOverrideDir;\n"
"\n"
-" vec4 vcolour0 = texture( uTexMain, vuv + vdir*vrand.x );\n"
-" vec4 vcolour1 = texture( uTexMain, vuv + vdir*vrand.y );\n"
-" vec4 vcolour2 = texture( uTexMain, vuv + vdir*vrand1.x );\n"
-" vec4 vcolour3 = texture( uTexMain, vuv + vdir*vrand1.y );\n"
+" vec4 vcolour0 = texture( uTexMain, min(vuv + vdir*vrand.x,uClampUv) );\n"
+" vec4 vcolour1 = texture( uTexMain, min(vuv + vdir*vrand.y,uClampUv) );\n"
+" vec4 vcolour2 = texture( uTexMain, min(vuv + vdir*vrand1.x,uClampUv) );\n"
+" vec4 vcolour3 = texture( uTexMain, min(vuv + vdir*vrand1.y,uClampUv) );\n"
"\n"
" FragColor = ( vcolour0 + vcolour1 + vcolour2 + vcolour3 ) * 0.25;\n"
"}\n"
static GLuint _uniform_blitblur_uOverrideDir;
static GLuint _uniform_blitblur_uTime;
static GLuint _uniform_blitblur_uGlitchStrength;
+static GLuint _uniform_blitblur_uClampUv;
static void shader_blitblur_uInverseRatio(v2f v){
glUniform2fv(_uniform_blitblur_uInverseRatio,1,v);
}
static void shader_blitblur_uGlitchStrength(float f){
glUniform1f(_uniform_blitblur_uGlitchStrength,f);
}
+static void shader_blitblur_uClampUv(v2f v){
+ glUniform2fv(_uniform_blitblur_uClampUv,1,v);
+}
static void shader_blitblur_register(void){
vg_shader_register( &_shader_blitblur );
}
_uniform_blitblur_uOverrideDir = glGetUniformLocation( _shader_blitblur.id, "uOverrideDir" );
_uniform_blitblur_uTime = glGetUniformLocation( _shader_blitblur.id, "uTime" );
_uniform_blitblur_uGlitchStrength = glGetUniformLocation( _shader_blitblur.id, "uGlitchStrength" );
+ _uniform_blitblur_uClampUv = glGetUniformLocation( _shader_blitblur.id, "uClampUv" );
}
#endif /* SHADER_blitblur_H */
(vg.time_frame_delta*60.0) );
shader_blitblur_uInverseRatio( inverse );
+ inverse[0] -= 0.0001f;
+ inverse[1] -= 0.0001f;
+ shader_blitblur_uClampUv( inverse );
+
static f64 effect_time = 133.0;
effect_time += vg.time_frame_delta;
shader_blitblur_uTime( effect_time );
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, "\x91", 2 ) ){
+ if( ui_button_text( btn_right, "\xbf", 2 ) ){
ISteamFriends *hSteamFriends = SteamAPI_SteamFriends();
SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( hSteamFriends,
"https://steamcommunity.com/sharedfiles/workshoplegalagreement",