X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=c98f10c83654c9744c2e51802cdc2b7223dfd8e1;hb=c88172d6968a02a4e643b74cc419c0ac8168d92a;hp=61a1391261e758f913c77fe5b46bb8b0f45ebaab;hpb=ec0918b2ef17a71418a57417689fd3042915aeeb;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 61a1391..c98f10c 100644 --- a/player.h +++ b/player.h @@ -2,11 +2,16 @@ * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved */ +/* + * TODO: Tilt camera down to face borde when its behind you or out of vision + */ + #ifndef PLAYER_H #define PLAYER_H #define PLAYER_REWIND_FRAMES 60*4 +#include "conf.h" #include "audio.h" #include "common.h" #include "world.h" @@ -14,7 +19,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, @@ -29,7 +36,7 @@ VG_STATIC float k_steer_air = 3.6f, k_steer_air_lerp = 0.3f, k_pump_force = 0.0f, - k_downforce = 5.0f, + k_downforce = 8.0f, k_walk_downforce = 8.0f, k_jump_charge_speed = (1.0f/1.0f), k_jump_force = 5.0f, @@ -38,7 +45,6 @@ VG_STATIC float k_walk_accel = 150.0f, k_walk_friction = 8.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; @@ -62,14 +68,15 @@ VG_STATIC struct gplayer v3f a, v_last, m, bob, vl; /* Utility */ - float vswitch, slip, slip_last, - reverse; + float vswitch, slip, slip_last, reverse; float grab, jump, pushing, push_time; v2f grab_mouse_delta; + int lift_frames; + double start_push; - int in_air, on_board, jump_charge, jump_dir; + int in_air, on_board, jump_charge, jump_dir, grind; m3x3f vr,vr_pstep; } @@ -83,8 +90,14 @@ VG_STATIC struct gplayer int rewind_sound_wait; v3f land_target; - v3f land_target_log[22]; - u32 land_target_colours[22]; + + struct land_log + { + v3f positions[50]; + u32 colour; + int count; + } + land_log[22]; int land_log_count; v3f handl_target, handr_target, @@ -97,6 +110,7 @@ VG_STATIC struct gplayer *input_js2v, *input_jump, *input_push, + *input_walk, *input_walkh, *input_walkv, *input_switch_mode, @@ -135,7 +149,8 @@ VG_STATIC struct gplayer walk_timer, fjump, fonboard, - frun; + frun, + fgrind; float walk; int step_phase; @@ -226,7 +241,8 @@ VG_STATIC void player_init(void) /* 1 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_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 ); @@ -256,8 +272,11 @@ VG_STATIC void player_init(void) /* 1 "bind jump space", "bind jump gp-a", - "bind push gp-lt", - "bind +push w", + "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", @@ -274,23 +293,23 @@ VG_STATIC void player_init(void) /* 1 }; 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 ); } @@ -387,7 +442,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 ) { @@ -451,7 +506,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; @@ -473,7 +528,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; @@ -503,8 +558,14 @@ VG_STATIC void player_update_fixed(void) /* 2 VG_STATIC void player_update_post(void) { for( int i=0; icount - 1; j ++ ) + vg_line( log->positions[j], log->positions[j+1], log->colour ); + + vg_line_cross( log->positions[log->count-1], log->colour, 0.25f ); + } if( player.is_dead ) { @@ -526,8 +587,8 @@ VG_STATIC void player_update_post(void) /* CAMERA POSITIONING: LAYER 0 */ - v2_copy( player.angles, camera_angles ); - v3_copy( player.camera_pos, camera_pos ); + v2_copy( player.angles, main_camera.angles ); + v3_copy( player.camera_pos, main_camera.pos ); if( player.rewinding ) { @@ -618,8 +679,6 @@ VG_STATIC void player_update_post(void) player.rewind_sound_wait = 0; } } - - } int i0 = floorf( player.rewind_time ), @@ -638,17 +697,19 @@ VG_STATIC void player_update_post(void) float blend = (4.0f-player.rewind_time) * 0.25f, c = vg_clampf( blend, 0.0f, 1.0f ); - camera_angles[0] = vg_alerpf(override_angles[0], player.angles[0], c); - camera_angles[1] = vg_lerpf (override_angles[1], player.angles[1], c); - v3_lerp( override_pos, player.camera_pos, c, camera_pos ); + main_camera.angles[0] = + vg_alerpf(override_angles[0], player.angles[0], c); + main_camera.angles[1] = + vg_lerpf (override_angles[1], player.angles[1], c); + v3_lerp( override_pos, player.camera_pos, c, main_camera.pos ); } } - camera_update(); + camera_update_transform( &main_camera ); player_audio(); } -VG_STATIC void draw_player( m4x3f cam ) +VG_STATIC void draw_player( camera *cam ) { if( player.is_dead ) player_model_copy_ragdoll(); @@ -656,8 +717,8 @@ VG_STATIC void draw_player( m4x3f cam ) shader_viewchar_use(); vg_tex2d_bind( &tex_characters, 0 ); shader_viewchar_uTexMain( 0 ); - shader_viewchar_uCamera( cam[3] ); - shader_viewchar_uPv( vg.pv ); + shader_viewchar_uCamera( cam->transform[3] ); + shader_viewchar_uPv( cam->mtx.pv ); shader_link_standard_ub( _shader_viewchar.id, 2 ); glUniformMatrix4x3fv( _uniform_viewchar_uTransforms, player.mdl.sk.bone_count,