X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.h;h=b529a4811cb31fb151fdc531abf3db2e4f76c7f0;hb=00d08b1e801d6b14fbfc07243271404cc7252e35;hp=867a23888eb751b501cf4ba432a724ea62bbb2ee;hpb=a9e3181f697ab37fc74f072cfcfdf44e2d659468;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.h b/player_skate.h index 867a238..b529a48 100644 --- a/player_skate.h +++ b/player_skate.h @@ -5,19 +5,18 @@ #define SKATE_CCD -struct player_skate -{ - struct - { - enum skate_activity - { +typedef struct jump_info jump_info; + +struct player_skate{ + struct player_skate_state{ + enum skate_activity{ k_skate_activity_air, + k_skate_activity_air_to_grind, k_skate_activity_ground, k_skate_activity_undefined, k_skate_activity_grind_any, k_skate_activity_grind_boardslide, - k_skate_activity_grind_noseslide, - k_skate_activity_grind_tailslide, + k_skate_activity_grind_metallic, k_skate_activity_grind_back50, k_skate_activity_grind_front50, k_skate_activity_grind_5050 @@ -25,11 +24,7 @@ struct player_skate activity, activity_prev; - float /* steery, - steerx, - steery_s, - steerx_s, */ - reverse, + float reverse, slip; int manual_direction; @@ -42,20 +37,11 @@ struct player_skate v3f trick_vel, /* measured in units of TAU/s */ trick_euler; /* measured in units of TAU */ float trick_time; - - float gravity_bias; -#if 0 - m3x3f velocity_bias, - velocity_bias_pstep; - v3f apex; -#endif v3f up_dir; v3f head_position; - int lift_frames; - v3f throw_v; v3f cog_v, cog; @@ -63,7 +49,8 @@ struct player_skate v2f grab_mouse_delta; int charging_jump, jump_dir; - float jump_charge; + float jump_charge, + slap; double jump_time; double start_push, @@ -75,14 +62,15 @@ struct player_skate double air_start; v3f air_init_v, air_init_co; + + v4f smoothed_rotation; } state, state_gate_storage; - - /* animation */ + /* animation /audio */ struct skeleton_anim *anim_stand, *anim_highg, *anim_slide, - *anim_air, + *anim_air, *anim_grind, *anim_grind_jump, *anim_push, *anim_push_reverse, *anim_ollie, *anim_ollie_reverse, *anim_grabs, *anim_stop; @@ -94,11 +82,14 @@ struct player_skate blend_z, blend_x, blend_fly, + blend_grind, + blend_grind_balance, blend_stand, blend_push, blend_jump, blend_airdir, - blend_weight; + blend_weight, + subslap; /* vectors representing the direction of the axels in localspace */ v3f truckv0[2]; @@ -107,6 +98,20 @@ struct player_skate audio_channel *aud_main, *aud_slide, *aud_air; enum mdl_surface_prop surface, audio_surface; + int wheel_contacts[2]; + float sample_change_cooldown; + + enum { + k_skate_sample_concrete, + k_skate_sample_wood, + k_skate_sample_concrete_scrape_metal, + k_skate_sample_concrete_scrape_wood, + k_skate_sample_metal_scrape_generic + } + main_sample_type; + + player_pose holdout; + /* * Physics * ---------------------------------------------------- @@ -115,8 +120,7 @@ struct player_skate float substep, substep_delta; - struct land_prediction - { + struct jump_info{ v3f log[50]; v3f n; v3f apex; @@ -128,9 +132,9 @@ struct player_skate float score, land_dist; - enum prediction_type - { + enum prediction_type{ k_prediction_none, + k_prediction_unset, k_prediction_land, k_prediction_grind } @@ -138,8 +142,9 @@ struct player_skate u32 colour; } - predictions[32]; - u32 prediction_count; + possible_jumps[36]; + u32 possible_jump_count; + float land_dist; v3f land_normal; @@ -148,12 +153,12 @@ struct player_skate grind_vec, grind_dir; - u32 frames_since_activity_change; + u32 grind_cooldown, + surface_cooldown; float grind_strength; - struct grind_limit - { + struct grind_limit{ v3f ra, n; float p; } @@ -161,6 +166,88 @@ struct player_skate u32 limit_count; }; +VG_STATIC float + k_friction_lat = 12.0f, + k_friction_resistance = 0.01f, + + k_max_push_speed = 16.0f, + k_push_accel = 10.0f, + k_push_cycle_rate = 8.0f, + + k_steer_ground = 2.5f, + k_steer_air = 3.6f, + + k_jump_charge_speed = (1.0f/0.4f), + k_jump_force = 5.0f, + + k_cog_spring = 0.2f, + k_cog_damp = 0.02f, + k_cog_mass_ratio = 0.9f, + + k_mmthrow_steer = 1.0f, + 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 = 300.0f, + k_spring_dampener = 5.0f, + + k_grind_spring = 50.0f, + k_grind_aligment = 10.0f, + k_grind_dampener = 5.0f, + + k_surface_spring = 100.0f, + k_surface_dampener = 40.0f, + k_manul_spring = 200.0f, + k_manul_dampener = 30.0f, + k_board_interia = 8.0f, + + k_grind_decayxy = 30.0f, + k_grind_axel_min_vel = 1.0f, + k_grind_axel_max_angle = 0.95f, /* cosine(|a|) */ + k_grind_axel_max_vangle = 0.4f, + k_grind_max_friction = 3.0f, + k_grind_max_edge_angle = 0.97f, + + k_board_length = 0.45f, + k_board_width = 0.13f, + k_board_end_radius = 0.1f, + k_board_radius = 0.14f, /* 0.07 */ + + k_grind_balance = -40.0f; + +VG_STATIC void player__skate_register(void) +{ + VG_VAR_F32( k_grind_dampener, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_grind_spring, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_grind_aligment, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_surface_spring, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_surface_dampener, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_board_interia, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_grind_decayxy, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_grind_axel_min_vel, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_grind_axel_max_angle, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_grind_max_friction, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_grind_balance, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_friction_lat, flags=VG_VAR_CHEAT ); + + VG_VAR_F32( k_cog_spring, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_cog_damp, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_cog_mass_ratio, flags=VG_VAR_CHEAT ); + + VG_VAR_F32( k_spring_force, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_spring_dampener, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_spring_angular, flags=VG_VAR_CHEAT ); + + VG_VAR_F32( k_mmthrow_scale, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_mmcollect_lat, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_mmcollect_vert, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_mmdecay, flags=VG_VAR_CHEAT ); + VG_VAR_F32( k_mmthrow_steer, flags=VG_VAR_CHEAT ); +} + VG_STATIC void player__skate_bind ( player_instance *player ); VG_STATIC void player__skate_pre_update ( player_instance *player ); VG_STATIC void player__skate_update ( player_instance *player ); @@ -170,7 +257,8 @@ VG_STATIC void player__skate_animate ( player_instance *player, player_animation *anim ); VG_STATIC void player__skate_post_animate ( player_instance *player ); VG_STATIC void player__skate_reset ( player_instance *player, - struct respawn_point *rp ); + ent_spawn *rp ); +VG_STATIC void player__skate_restore( player_instance *player ); VG_STATIC void player__skate_clear_mechanics( player_instance *player ); VG_STATIC void player__skate_reset_animator( player_instance *player );