X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=f426b7daad07462dc915b518c36da249b0ff5fbc;hb=b3b0d3d852f102147c6306f71818013e51e1687e;hp=92667821e84363b2ffda5c4134e9a6cc637c31d0;hpb=0ae443b3f6b4b753f9a2eba58da597ae8cb14b4f;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 9266782..f426b7d 100644 --- a/player.h +++ b/player.h @@ -14,7 +14,7 @@ #include "bvh.h" VG_STATIC float - k_walkspeed = 20.0f, /* no longer used */ + k_walkspeed = 12.0f, /* no longer used */ k_runspeed = 20.0f, k_board_radius = 0.3f, k_board_length = 0.45f, @@ -66,6 +66,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; @@ -87,6 +89,20 @@ VG_STATIC struct gplayer v3f handl_target, handr_target, handl, handr; + + /* Input */ + struct input_binding *input_js1h, + *input_js1v, + *input_js2h, + *input_js2v, + *input_jump, + *input_push, + *input_walk, + *input_walkh, + *input_walkv, + *input_switch_mode, + *input_reset, + *input_grab; /* Camera */ float air_blend; @@ -189,6 +205,8 @@ VG_STATIC void player_save_rewind_frame(void); /* * Submodules */ +VG_STATIC void player_mouseview(void); + #include "player_physics.h" #include "player_ragdoll.h" #include "player_model.h" @@ -203,6 +221,66 @@ VG_STATIC void player_save_rewind_frame(void); VG_STATIC void player_init(void) /* 1 */ { + player.input_js1h = vg_create_named_input( "steer-h", k_input_type_axis ); + player.input_js1v = vg_create_named_input( "steer-v", k_input_type_axis ); + 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_jump = vg_create_named_input( "jump", k_input_type_button ); + 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 ); + player.input_walkv = vg_create_named_input( "walk-v", + k_input_type_axis ); + + + player.input_switch_mode = vg_create_named_input( "switch-mode", + k_input_type_button ); + player.input_reset = vg_create_named_input( "reset", k_input_type_button ); + + const char *default_cfg[] = + { + "bind steer-h gp-ls-h", + "bind -steer-h a", + "bind +steer-h d", + + "bind steer-v gp-ls-v", + "bind -steer-v w", + "bind +steer-v s", + + "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-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 d", + "bind -walk-h a", + "bind +walk-v w", + "bind -walk-v s", + + "bind reset gp-lb", + "bind reset r", + + "bind switch-mode gp-y", + "bind switch-mode e", + }; + + for( int i=0; iaxis.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 ); +} + +/* disaster */ +VG_STATIC int menu_enabled(void); +#include "menu.h" + /* Deal with input etc */ VG_STATIC void player_update_pre(void) { @@ -299,7 +427,7 @@ VG_STATIC void player_update_pre(void) return; } - if( vg_get_button_down( "reset" ) ) + if( vg_input_button_down( player.input_reset ) && !menu_enabled() ) { if( player.is_dead ) { @@ -363,7 +491,7 @@ VG_STATIC void player_update_pre(void) } } - if( vg_get_button_down( "switchmode" ) ) + if( vg_input_button_down( player.input_switch_mode ) && !menu_enabled() ) { phys->on_board ^= 0x1; @@ -380,9 +508,12 @@ VG_STATIC void player_update_pre(void) audio_unlock(); } + + if( !phys->on_board ) + player_mouseview(); } -VG_STATIC void player_update_fixed(void) /* 2 */ +VG_STATIC void player_update_fixed(void) /* 2 */ { if( player.rewinding ) return;