X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.h;h=735ffa613e8b59651fa73f4b6c544aae07c2c020;hb=e311bbe2fa903a7e2a922f202f389b799193195d;hp=b09c68a79334ee64c897328178424c4003405123;hpb=a528498841a151efbd38cddcc9f09a5f39dbbd19;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.h b/player_skate.h index b09c68a..735ffa6 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{ @@ -37,6 +36,9 @@ 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, @@ -71,31 +73,60 @@ struct player_skate{ v3f air_init_v, air_init_co; - v4f smoothed_rotation; - float land_dist; v3f land_normal; + v4f smoothed_rotation; - /* animator controls which require persistence */ - v3f board_trick_residualv, - board_trick_residuald; - f32 blend_slide, - blend_z, - blend_x, - blend_fly, - blend_grind, - blend_grind_balance, - blend_stand, - blend_push, - blend_jump, - blend_airdir, - blend_weight, - blend_trick_foot, - subslap; - v2f wobble; + 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; + } + animator; + /* animation /audio * --------------------------------------------------------------*/ struct skeleton_anim *anim_stand, *anim_highg, *anim_slide, @@ -121,7 +152,6 @@ struct player_skate{ k_skate_sample_metal_scrape_generic } main_sample_type; - player_pose holdout; /* * Physics @@ -167,9 +197,19 @@ struct player_skate{ } 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, @@ -221,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 ); @@ -251,19 +290,41 @@ VG_STATIC void player__skate_register(void) 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_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 */