X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=119b3f71348fde480427b721ec77860be2d0b6d2;hb=d45f2b7d71311ce5ce8cd3496844b4ec7d2f46ac;hp=0e92f3aae5d6f5038bcd7703adb0c046c731844a;hpb=2a238d32da833812e837cf38e16a7685c98db5c3;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 0e92f3a..119b3f7 100644 --- a/player.h +++ b/player.h @@ -1,9 +1,5 @@ /* - * 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 + * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved */ #ifndef PLAYER_H @@ -21,12 +17,10 @@ VG_STATIC float k_walkspeed = 12.0f, k_air_accelerate = 20.0f, - k_runspeed = 20.0f, k_board_radius = 0.3f, k_board_length = 0.45f, k_board_allowance = 0.04f, - //k_friction_lat = 8.8f, k_friction_lat = 12.0f, k_friction_resistance = 0.01f, k_max_push_speed = 16.0f, @@ -36,14 +30,27 @@ VG_STATIC float k_steer_air = 3.6f, k_steer_air_lerp = 0.3f, k_pump_force = 0.0f, - k_downforce = 8.0f, + k_downforce = 5.0f, k_walk_downforce = 8.0f, k_jump_charge_speed = (1.0f/1.0f), k_jump_force = 5.0f, k_pitch_limit = 1.5f, k_look_speed = 2.0f, k_walk_accel = 150.0f, - k_walk_friction = 8.0f; + k_walk_friction = 8.0f, + + k_cog_spring = 0.2f, + k_cog_damp = 0.02f, + k_cog_mass_ratio = 0.9f, + + k_mmthrow_scale = 6.0f, + k_mmcollect_lat = 2.0f, + k_mmcollect_vert = 0.0f, + k_mmdecay = 12.0f, + k_spring_angular = 1.0f, + + k_spring_force = 15.0f, + k_spring_dampener = 5.0f; VG_STATIC int freecam = 0; VG_STATIC int walk_grid_iterations = 1; @@ -73,6 +80,10 @@ VG_STATIC struct gplayer float grab, jump, pushing, push_time, rise; v2f grab_mouse_delta; + v3f throw_v; + v3f cog, + cog_v; + int lift_frames; double start_push; @@ -83,6 +94,10 @@ VG_STATIC struct gplayer phys, phys_gate_frame; + float normal_pressure; + v3f debug_mmcollect_lat, + debug_mmcollect_vert; + m4x3f visual_transform, inv_visual_transform; @@ -161,6 +176,9 @@ VG_STATIC struct gplayer frun, fgrind; + v3f board_offset; + v4f board_rotation; + float walk; int step_phase; enum mdl_surface_prop surface_prop; @@ -187,7 +205,10 @@ VG_STATIC struct gplayer id_ik_hand_r, id_ik_elbow_l, id_ik_elbow_r, - id_head; + id_head, + id_ik_foot_l, + id_ik_foot_r, + id_board; v3f cam_pos; @@ -254,6 +275,7 @@ VG_STATIC void player_mouseview(void); */ VG_STATIC int kill_player( int argc, char const *argv[] ); VG_STATIC int reset_player( int argc, char const *argv[] ); +VG_STATIC void reset_player_poll( int argc, char const *argv[] ); VG_STATIC void player_init(void) /* 1 */ { @@ -321,97 +343,42 @@ VG_STATIC void player_init(void) /* 1 */ rb_init( &player.collide_front ); rb_init( &player.collide_back ); - vg_convar_push( (struct vg_convar){ - .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, - .data_type = k_convar_dtype_f32, - .opt_f32 = { .clamp = 0 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "walk_accel", - .data = &k_walk_accel, - .data_type = k_convar_dtype_f32, - .opt_f32 = { .clamp = 0 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "fc", - .data = &freecam, - .data_type = k_convar_dtype_i32, - .opt_i32 = { .min=0, .max=1, .clamp=1 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "cl_thirdperson", - .data = &cl_thirdperson, - .data_type = k_convar_dtype_i32, - .opt_i32 = { .min=0, .max=1, .clamp=1 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "fcs", - .data = &fc_speed, - .data_type = k_convar_dtype_f32, - .opt_f32 = { .clamp = 0 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "k_ragdoll_limit_scale", - .data = &k_ragdoll_limit_scale, - .data_type = k_convar_dtype_f32, - .opt_f32 = { .clamp = 0 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "k_ragdoll_div", - .data = &k_ragdoll_div, - .data_type = k_convar_dtype_i32, - .opt_i32 = { .clamp=0 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "k_ragdoll_debug_collider", - .data = &k_ragdoll_debug_collider, - .data_type = k_convar_dtype_i32, - .opt_i32 = { .clamp=0 }, - .persistent = 1 - }); - - vg_convar_push( (struct vg_convar){ - .name = "k_ragdoll_debug_constraints", - .data = &k_ragdoll_debug_constraints, - .data_type = k_convar_dtype_i32, - .opt_i32 = { .clamp=0 }, - .persistent = 1 - }); + VG_VAR_F32( k_walkspeed ); + VG_VAR_F32( k_air_accelerate ); + VG_VAR_F32( k_runspeed ); + VG_VAR_F32( k_walk_accel ); + + VG_VAR_I32( freecam ); + VG_VAR_I32( cl_thirdperson ); + VG_VAR_F32_PERSISTENT( fc_speed ); + + /* TODO: NOT PERSISTENT */ + VG_VAR_F32( k_ragdoll_limit_scale ); + VG_VAR_I32( k_ragdoll_div ); + VG_VAR_I32( k_ragdoll_debug_collider ); + VG_VAR_I32( k_ragdoll_debug_constraints ); + + VG_VAR_F32( k_friction_lat ); + + VG_VAR_F32( k_cog_spring ); + VG_VAR_F32( k_cog_damp ); + + VG_VAR_F32( k_cog_mass_ratio ); + VG_VAR_F32( k_downforce ); + + VG_VAR_F32( k_spring_force ); + VG_VAR_F32( k_spring_dampener ); + VG_VAR_F32( k_spring_angular ); + + VG_VAR_F32( k_mmthrow_scale ); + VG_VAR_F32( k_mmcollect_lat ); + VG_VAR_F32( k_mmcollect_vert ); + VG_VAR_F32( k_mmdecay ); vg_function_push( (struct vg_cmd){ .name = "reset", - .function = reset_player + .function = reset_player, + .poll_suggest = reset_player_poll }); vg_function_push( (struct vg_cmd){ @@ -428,9 +395,6 @@ VG_STATIC void player_init(void) /* 1 */ sizeof(struct rewind_frame) * PLAYER_REWIND_FRAMES ); player_model_init(); - - /* controls */ - } VG_STATIC void player_save_rewind_frame(void) @@ -529,11 +493,20 @@ VG_STATIC void player_update_pre(void) } - - - - - + vg_line_pt3( phys->cog, 0.10f, 0xffffffff ); + vg_line_pt3( phys->cog, 0.09f, 0xffffffff ); + vg_line_pt3( phys->cog, 0.08f, 0xffffffff ); + vg_line( phys->cog, phys->rb.co, 0xff000000 ); + + v3f spring_end; + v3f throw_end, p0, p1; + v3_muladds( phys->rb.co, phys->rb.up, 1.0f, spring_end ); + v3_muladds( spring_end, phys->throw_v, 1.0f, throw_end ); + v3_muladds( spring_end, player.debug_mmcollect_lat, 1.0f, p0 ); + v3_muladds( spring_end, player.debug_mmcollect_vert, 1.0f, p1 ); + vg_line( spring_end, throw_end, VG__RED ); + vg_line( spring_end, p0, VG__GREEN ); + vg_line( spring_end, p1, VG__BLUE ); if( player.rewinding ) return;