X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=d0ce43137cb08cda399fb80cc64db3b2f58a78c6;hb=777083e1f715a26d3f68be4ba5bdf2cbcaa84a05;hp=c8c9abc54b8932ecd480838014a44001ca9c4dfb;hpb=6294ef64d948eab2365e39a2645c9843aa96fba8;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index c8c9abc..d0ce431 100644 --- a/player.h +++ b/player.h @@ -14,7 +14,9 @@ #include "bvh.h" VG_STATIC float - k_walkspeed = 12.0f, /* no longer used */ + k_walkspeed = 12.0f, + k_air_accelerate = 20.0f, + k_runspeed = 20.0f, k_board_radius = 0.3f, k_board_length = 0.45f, @@ -66,6 +68,8 @@ VG_STATIC struct gplayer reverse; float grab, jump, pushing, push_time; + v2f grab_mouse_delta; + double start_push; int in_air, on_board, jump_charge, jump_dir; @@ -93,10 +97,9 @@ VG_STATIC struct gplayer *input_js1v, *input_js2h, *input_js2v, - *input_emjs2h, - *input_emjs2v, *input_jump, *input_push, + *input_walk, *input_walkh, *input_walkv, *input_switch_mode, @@ -225,10 +228,9 @@ VG_STATIC void player_init(void) /* 1 player.input_grab = vg_create_named_input( "grab", k_input_type_axis_norm ); player.input_js2h = vg_create_named_input( "grab-h", k_input_type_axis ); player.input_js2v = vg_create_named_input( "grab-v", k_input_type_axis ); - player.input_emjs2h = vg_create_named_input( "kbgrab-h", k_input_type_axis ); - player.input_emjs2v = vg_create_named_input( "kbgrab-v", k_input_type_axis ); player.input_jump = vg_create_named_input( "jump", k_input_type_button ); - player.input_push = vg_create_named_input( "push", k_input_type_axis_norm ); + player.input_push = vg_create_named_input( "push", k_input_type_button ); + player.input_walk = vg_create_named_input( "walk", k_input_type_button ); player.input_walkh = vg_create_named_input( "walk-h", k_input_type_axis ); @@ -250,23 +252,22 @@ VG_STATIC void player_init(void) /* 1 "bind -steer-v w", "bind +steer-v s", - "bind grab gp-rt", - "bind grab-h gp-rs-h", - "bind grab-v gp-rs-v", - - "bind -kbgrab-h left", - "bind +kbgrab-h right", - "bind -kbgrab-v down", - "bind +kbgrab-v up", + "bind grab gp-rt", + "bind +grab shift", + "bind grab-h gp-rs-h", + "bind grab-v gp-rs-v", "bind jump space", "bind jump gp-a", - "bind push gp-lt", - "bind +push shift", + "bind push gp-b", + "bind push w", + + "bind walk shift", + "bind walk gp-ls", - "bind walk-h gp-ls-h", - "bind walk-v gp-ls-v", + "bind walk-h gp-ls-h", + "bind walk-v -gp-ls-v", "bind +walk-h d", "bind -walk-h a", "bind +walk-v w", @@ -295,13 +296,21 @@ VG_STATIC void player_init(void) /* 1 }); vg_convar_push( (struct vg_convar){ - .name = "walk_speed", + .name = "gwalk_speed", .data = &k_walkspeed, .data_type = k_convar_dtype_f32, .opt_f32 = { .clamp = 0 }, .persistent = 0 }); + vg_convar_push( (struct vg_convar){ + .name = "air_accelerate", + .data = &k_air_accelerate, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 0 + }); + vg_convar_push( (struct vg_convar){ .name = "run_speed", .data = &k_runspeed, @@ -371,15 +380,51 @@ VG_STATIC void player_save_rewind_frame(void) } } + +/* disaster */ +VG_STATIC int menu_enabled(void); +#include "menu.h" + /* * Free camera movement */ VG_STATIC void player_mouseview(void) { - if( ui_want_mouse() ) + if( menu_enabled() ) return; v2_muladds( player.angles, vg.mouse_delta, 0.0025f, player.angles ); + + if( vg_input.controller_should_use_trackpad_look ) + { + static v2f last_input; + static v2f vel; + static v2f vel_smooth; + + v2f input = { player.input_js2h->axis.value, + player.input_js2v->axis.value }; + + if( (v2_length2(last_input) > 0.001f) && (v2_length2(input) > 0.001f) ) + { + v2_sub( input, last_input, vel ); + v2_muls( vel, 1.0f/vg.time_delta, vel ); + } + else + { + v2_zero( vel ); + } + + v2_lerp( vel_smooth, vel, vg.time_delta*8.0f, vel_smooth ); + + v2_muladds( player.angles, vel_smooth, vg.time_delta, player.angles ); + v2_copy( input, last_input ); + } + else + { + player.angles[0] += player.input_js2h->axis.value * vg.time_delta * 4.0f; + player.angles[1] += player.input_js2v->axis.value * vg.time_delta * 4.0f; + } + player.angles[1] = vg_clampf( player.angles[1], -VG_PIf*0.5f, VG_PIf*0.5f ); } @@ -393,7 +438,7 @@ VG_STATIC void player_update_pre(void) return; } - if( vg_input_button_down( player.input_reset ) ) + if( vg_input_button_down( player.input_reset ) && !menu_enabled() ) { if( player.is_dead ) { @@ -457,7 +502,7 @@ VG_STATIC void player_update_pre(void) } } - if( vg_input_button_down( player.input_switch_mode ) ) + if( vg_input_button_down( player.input_switch_mode ) && !menu_enabled() ) { phys->on_board ^= 0x1; @@ -479,7 +524,7 @@ VG_STATIC void player_update_pre(void) player_mouseview(); } -VG_STATIC void player_update_fixed(void) /* 2 */ +VG_STATIC void player_update_fixed(void) /* 2 */ { if( player.rewinding ) return;