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 push_time, jump_time;
u8 jump_dir;
u8 trick_type;
+ u8 activity;
}
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,
+};
+
static float
k_friction_lat = 12.0f,
k_friction_resistance = 0.01f,
k_grind_balance = -40.0f;
-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 );
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_reset (ent_spawn *rp);
+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);
struct player_subsystem_interface static player_subsystem_skate = {
.system_register = player__skate_register,
.bind = player__skate_bind,
- .reset = player__skate_reset,
.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)
+ .animator_size = sizeof(player_skate.animator),
+ .name = "Skate"
};
#endif /* PLAYER_SKATE_H */