X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=c8c9abc54b8932ecd480838014a44001ca9c4dfb;hb=6294ef64d948eab2365e39a2645c9843aa96fba8;hp=a7831b7e3b982e6182903e3ff3fd51bed6b1a222;hpb=4f96bd0040e35ecb21d353ee2b895129682d22c1;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index a7831b7..c8c9abc 100644 --- a/player.h +++ b/player.h @@ -13,8 +13,8 @@ #include "skeleton.h" #include "bvh.h" -static float - k_walkspeed = 20.0f, /* no longer used */ +VG_STATIC float + k_walkspeed = 12.0f, /* no longer used */ k_runspeed = 20.0f, k_board_radius = 0.3f, k_board_length = 0.45f, @@ -38,9 +38,10 @@ static float k_walk_accel = 150.0f, k_walk_friction = 8.0f; -static int freecam = 0; -static int walk_grid_iterations = 1; -static float fc_speed = 10.0f; +VG_STATIC int cl_playermdl_id = 0; +VG_STATIC int freecam = 0; +VG_STATIC int walk_grid_iterations = 1; +VG_STATIC float fc_speed = 10.0f; /* * ----------------------------------------------------------------------------- @@ -48,7 +49,7 @@ static float fc_speed = 10.0f; * ----------------------------------------------------------------------------- */ -static struct gplayer +VG_STATIC struct gplayer { /* Physics */ rigidbody collide_front, collide_back; @@ -86,6 +87,21 @@ static struct gplayer v3f handl_target, handr_target, handl, handr; + + /* Input */ + struct input_binding *input_js1h, + *input_js1v, + *input_js2h, + *input_js2v, + *input_emjs2h, + *input_emjs2v, + *input_jump, + *input_push, + *input_walkh, + *input_walkv, + *input_switch_mode, + *input_reset, + *input_grab; /* Camera */ float air_blend; @@ -123,11 +139,14 @@ static struct gplayer float walk; int step_phase; + enum mdl_surface_prop surface_prop; /* player model */ struct player_model { - glmesh mesh; + glmesh player_meshes[3]; + + mdl_context meta; struct skeleton sk; struct skeleton_anim *anim_stand, *anim_highg, @@ -159,7 +178,7 @@ static struct gplayer rigidbody rb; u32 parent; } - *ragdoll; + ragdoll[32]; u32 ragdoll_count; int shoes[2]; @@ -175,16 +194,18 @@ player = /* * API */ -static float *player_get_pos(void); -static void player_kill(void); -static float *player_cam_pos(void); -static void player_save_frame(void); -static void player_restore_frame(void); -static void player_save_rewind_frame(void); +VG_STATIC float *player_get_pos(void); +VG_STATIC void player_kill(void); +VG_STATIC float *player_cam_pos(void); +VG_STATIC void player_save_frame(void); +VG_STATIC void player_restore_frame(void); +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" @@ -197,18 +218,88 @@ static void player_save_rewind_frame(void); * ----------------------------------------------------------------------------- */ -static void player_init(void) /* 1 */ +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_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_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-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 jump space", + "bind jump gp-a", + + "bind push gp-lt", + "bind +push shift", + + "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; ion_board ) - { - player.angles[0] = atan2f( -phys->rb.forward[2], - -phys->rb.forward[0] ); - } + if( !phys->on_board ) + { + player.angles[0] = atan2f( -phys->rb.forward[2], + -phys->rb.forward[0] ); + } - player.mdl.shoes[0] = 1; - player.mdl.shoes[1] = 1; + player.mdl.shoes[0] = 1; + player.mdl.shoes[1] = 1; - world_routes_notify_reset(); + world_routes_notify_reset(); - /* apply 1 frame of movement */ - player_do_motion(); + /* apply 1 frame of movement */ + player_do_motion(); + } + else + { + /* cant do that */ + audio_lock(); + audio_play_oneshot( &audio_rewind[4], 1.0f ); + audio_unlock(); + } } } - if( vg_get_button_down( "switchmode" ) ) + if( vg_input_button_down( player.input_switch_mode ) ) { phys->on_board ^= 0x1; @@ -351,9 +474,12 @@ static void player_update_pre(void) audio_unlock(); } + + if( !phys->on_board ) + player_mouseview(); } -static void player_update_fixed(void) /* 2 */ +VG_STATIC void player_update_fixed(void) /* 2 */ { if( player.rewinding ) return; @@ -380,7 +506,7 @@ static void player_update_fixed(void) /* 2 */ } } -static void player_update_post(void) +VG_STATIC void player_update_post(void) { for( int i=0; i= 5.0f ) - { - audio_lock(); - audio_player_playclip( &audio_rewind_player, &audio_rewind[4] ); - audio_unlock(); - - player.dist_accum -= 5.0f; - } -#endif - player.rewind_time = vg_maxf( 0.0f, player.rewind_time ); float current_time = vg.time - player.diag_rewind_start, @@ -539,7 +654,7 @@ static void player_update_post(void) player_audio(); } -static void draw_player( m4x3f cam ) +VG_STATIC void draw_player( m4x3f cam ) { if( player.is_dead ) player_model_copy_ragdoll(); @@ -555,8 +670,8 @@ static void draw_player( m4x3f cam ) 0, (float *)player.mdl.sk.final_mtx ); - mesh_bind( &player.mdl.mesh ); - mesh_draw( &player.mdl.mesh ); + mesh_bind( &player.mdl.player_meshes[cl_playermdl_id] ); + mesh_draw( &player.mdl.player_meshes[cl_playermdl_id] ); } /* @@ -565,21 +680,22 @@ static void draw_player( m4x3f cam ) * ----------------------------------------------------------------------------- */ -static float *player_get_pos(void) +VG_STATIC float *player_get_pos(void) { return player.phys.rb.co; } -static void player_kill(void) +VG_STATIC void player_kill(void) { if( player.death_tick_allowance == 0 ) { player.is_dead = 1; player_ragdoll_copy_model( player.phys.rb.v ); + world_routes_clear(); } } -static float *player_cam_pos(void) +VG_STATIC float *player_cam_pos(void) { return player.camera_pos; }