X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.h;h=269e552cfff54d3340bc1cfbff949a85c6938ad0;hb=7b4f1548e85202dd34e4f849e56e042d73dbb6f2;hp=e5dde1208fe1696b270748664932ea4bfded9abc;hpb=09fc72b08113fa157a3abb2ded6086babedd10cf;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.h b/player_skate.h index e5dde12..269e552 100644 --- a/player_skate.h +++ b/player_skate.h @@ -1,10 +1,9 @@ #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{ @@ -13,6 +12,7 @@ struct player_skate{ k_skate_activity_air, k_skate_activity_air_to_grind, k_skate_activity_ground, + k_skate_activity_handplant, k_skate_activity_undefined, k_skate_activity_grind_any, k_skate_activity_grind_boardslide, @@ -45,11 +45,13 @@ struct player_skate{ k_trick_type_none, k_trick_type_kickflip, k_trick_type_shuvit, - k_trick_type_treflip + k_trick_type_treflip, } trick_type; float gravity_bias; + f32 trick_input_collect; + v3f up_dir; v3f head_position; @@ -77,17 +79,25 @@ struct player_skate{ float land_dist; v3f land_normal; v4f smoothed_rotation; + + f32 velocity_limit, grind_y_start, skid; + f32 handplant_t; + + v3f store_cog_v, store_cog, store_co; + v4f store_smoothed, store_q; } state; struct player_skate_animator { v3f root_co; v4f root_q; + v3f root_v; v3f offset, local_cog; f32 slide, + skid, z, x, fly, @@ -112,14 +122,17 @@ struct player_skate{ v4f qflip; v3f board_euler; + f32 board_lean; v2f steer, grab; f32 jump_charge; - /* linear anims */ - f32 push_time, jump_time; + /* linear anims. TODO: we can union a bunch of variables here depending + * on activity. */ + f32 push_time, jump_time, handplant_t; u8 jump_dir; u8 trick_type; + u8 activity; } animator; @@ -129,7 +142,8 @@ struct player_skate{ *anim_air, *anim_grind, *anim_grind_jump, *anim_push, *anim_push_reverse, *anim_ollie, *anim_ollie_reverse, - *anim_grabs, *anim_stop; + *anim_grabs, *anim_stop, + *anim_handplant; /* vectors representing the direction of the axels in localspace */ v3f truckv0[2]; @@ -193,51 +207,19 @@ struct player_skate{ } limits[3]; u32 limit_count; -}; - -struct player_skate_animator_q { - v3f root_co; - v4f root_q; - - i8 offset[3]; - i8 local_cog[3]; - i8 slide, - z, - x, - fly, - grind, - grind_balance, - stand, - push, - jump, - airdir, - weight, - trick_foot, - slap, - subslap, - reverse, - delayed_slip_dir, - grabbing; - - i8 wobble[2]; - i8 foot_offset[2]; - - i16 qfixuptotal[4]; - i16 qflip; - - i16 board_euler[3]; - i8 steer[2], grab[2]; - - u8 jump_charge; - - /* linear anims */ - i8 push_time, jump_time; - u8 jump_dir; - u8 trick_type; } -animator; +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, @@ -287,10 +269,10 @@ VG_STATIC float k_board_end_radius = 0.1f, k_board_radius = 0.14f, /* 0.07 */ - k_grind_balance = -40.0f; + k_grind_balance = -40.0f, + k_anim_transition = 0.12f; -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 ); @@ -317,21 +299,44 @@ VG_STATIC void player__skate_register(void) 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_VAR_F32( k_anim_transition, 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 ); -VG_STATIC void player__skate_pose ( player_instance *player ); -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_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 */