X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.h;h=735ffa613e8b59651fa73f4b6c544aae07c2c020;hb=e311bbe2fa903a7e2a922f202f389b799193195d;hp=464ef50d9326a81264d94a565be1fb1a03d08918;hpb=f99902f513b0ad606437bf32de47405dd4ea5f98;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.h b/player_skate.h index 464ef50..735ffa6 100644 --- a/player_skate.h +++ b/player_skate.h @@ -1,14 +1,13 @@ #ifndef PLAYER_SKATE_H #define PLAYER_SKATE_H +#include "player.h" #include "player_api.h" -#define SKATE_CCD - typedef struct jump_info jump_info; struct player_skate{ - struct{ + struct player_skate_state{ enum skate_activity{ k_skate_activity_air, k_skate_activity_air_to_grind, @@ -24,9 +23,10 @@ struct player_skate{ activity, activity_prev; - float reverse, - slip; + u32 grind_cooldown, + surface_cooldown; + f32 reverse, slip, delayed_slip_dir; int manual_direction; /* tricks */ @@ -36,7 +36,17 @@ struct player_skate{ v3f trick_vel, /* measured in units of TAU/s */ trick_euler; /* measured in units of TAU */ + v3f trick_residualv, /* spring */ + trick_residuald; + float trick_time; + enum trick_type{ + k_trick_type_none, + k_trick_type_kickflip, + k_trick_type_shuvit, + k_trick_type_treflip + } + trick_type; float gravity_bias; v3f up_dir; @@ -63,37 +73,70 @@ struct player_skate{ v3f air_init_v, air_init_co; + float land_dist; + v3f land_normal; v4f smoothed_rotation; + + f32 velocity_limit, grind_y_start; + } + state; + + struct player_skate_animator { + v3f root_co; + v4f root_q; + v3f root_v; + + v3f offset, + local_cog; + + f32 slide, + z, + x, + fly, + grind, + grind_balance, + stand, + push, + jump, + airdir, + weight, + trick_foot, + slap, + subslap, + reverse, + delayed_slip_dir, + grabbing; + + v2f wobble; + f32 foot_offset[2]; + + v4f qfixuptotal; + v4f qflip; + + v3f board_euler; + f32 board_lean; + v2f steer, grab; + + f32 jump_charge; + + /* linear anims */ + f32 push_time, jump_time; + u8 jump_dir; + u8 trick_type; + u8 activity; } - state, - state_gate_storage; + animator; - /* animation /audio */ + /* animation /audio + * --------------------------------------------------------------*/ struct skeleton_anim *anim_stand, *anim_highg, *anim_slide, *anim_air, *anim_grind, *anim_grind_jump, *anim_push, *anim_push_reverse, *anim_ollie, *anim_ollie_reverse, *anim_grabs, *anim_stop; - v3f - board_trick_residualv, - board_trick_residuald; - - float blend_slide, - blend_z, - blend_x, - blend_fly, - blend_grind, - blend_grind_balance, - blend_stand, - blend_push, - blend_jump, - blend_airdir, - blend_weight, - subslap; /* vectors representing the direction of the axels in localspace */ v3f truckv0[2]; - v2f wobble; audio_channel *aud_main, *aud_slide, *aud_air; enum mdl_surface_prop surface, audio_surface; @@ -110,15 +153,12 @@ struct player_skate{ } main_sample_type; - player_pose holdout; - /* * Physics * ---------------------------------------------------- */ - float substep, - substep_delta; + float substep, substep_delta; struct jump_info{ v3f log[50]; @@ -145,28 +185,31 @@ struct player_skate{ possible_jumps[36]; u32 possible_jump_count; - float land_dist; - v3f land_normal; - v3f surface_picture, weight_distribution, grind_vec, grind_dir; - u32 grind_cooldown, - surface_cooldown; - float grind_strength; - struct grind_limit{ v3f ra, n; float p; } limits[3]; u32 limit_count; +} +static player_skate; + +enum player_skate_soundeffect { + k_player_skate_soundeffect_jump, + k_player_skate_soundeffect_tap, + k_player_skate_soundeffect_land_good, + k_player_skate_soundeffect_land_bad, + k_player_skate_soundeffect_grind_metal, + k_player_skate_soundeffect_grind_wood, }; -VG_STATIC float +static float k_friction_lat = 12.0f, k_friction_resistance = 0.01f, @@ -184,6 +227,7 @@ VG_STATIC float 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, @@ -217,8 +261,7 @@ VG_STATIC float k_grind_balance = -40.0f; -VG_STATIC void player__skate_register(void) -{ +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 ); @@ -244,21 +287,44 @@ VG_STATIC void player__skate_register(void) 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 ); -VG_STATIC void player__skate_post_update ( player_instance *player ); -VG_STATIC void player__skate_im_gui ( player_instance *player ); -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, - 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 ); -VG_STATIC void player__approximate_best_trajectory( player_instance *player ); +static void player__skate_bind (void); +static void player__skate_pre_update (void); +static void player__skate_update (void); +static void player__skate_post_update (void); +static void player__skate_im_gui (void); +static void player__skate_animate (void); +static void player__skate_pose (void *animator, player_pose *pose); +static void player__skate_effects( void *_animator, m4x3f *final_mtx, + struct player_board *board, + struct player_effects_data *effect_data ); +static void player__skate_post_animate (void); +static void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ); +static void player__skate_sfx_oneshot ( u8 id, v3f pos, f32 volume ); + +static void player__skate_clear_mechanics(void); +static void player__skate_reset_animator(void); +static void player__approximate_best_trajectory(void); + +struct player_subsystem_interface static player_subsystem_skate = { + .system_register = player__skate_register, + .bind = player__skate_bind, + .pre_update = player__skate_pre_update, + .update = player__skate_update, + .post_update = player__skate_post_update, + .im_gui = player__skate_im_gui, + .animate = player__skate_animate, + .pose = player__skate_pose, + .effects = player__skate_effects, + .post_animate = player__skate_post_animate, + .network_animator_exchange = player__skate_animator_exchange, + .sfx_oneshot = player__skate_sfx_oneshot, + + .animator_data = &player_skate.animator, + .animator_size = sizeof(player_skate.animator), + .name = "Skate" +}; + #endif /* PLAYER_SKATE_H */