X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=player_skate.c;h=75b65fc7df76ec46b12a46a4f553ee628b771904;hb=refs%2Fheads%2Fmaster;hp=b193173b888960bc497c9d2cfecf520a7fdf7171;hpb=a109f126d8adab622e38fbcc2d4281e75255246a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index b193173..75b65fc 100644 --- a/player_skate.c +++ b/player_skate.c @@ -1,6 +1,4 @@ -#ifndef PLAYER_SKATE_C -#define PLAYER_SKATE_C - +#include "player_skate.h" #include "player.h" #include "audio.h" #include "vg/vg_perlin.h" @@ -8,13 +6,40 @@ #include "menu.h" #include "ent_skateshop.h" #include "addon.h" +#include "input.h" +#include "ent_tornado.h" -#include "ent_tornado.c" #include "vg/vg_rigidbody.h" #include "scene_rigidbody.h" #include "player_glide.h" +#include "player_dead.h" +#include "player_walk.h" +#include + +struct player_skate player_skate; +struct player_subsystem_interface 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, + .sfx_comp = player__skate_comp_audio, + .sfx_kill = player__skate_kill_audio, + + .animator_data = &player_skate.animator, + .animator_size = sizeof(player_skate.animator), + .name = "Skate" +}; -static void player__skate_bind(void){ +void player__skate_bind(void){ struct skeleton *sk = &localplayer.skeleton; rb_update_matrices( &localplayer.rb ); @@ -38,7 +63,7 @@ static void player__skate_bind(void){ *bindings[i].anim = skeleton_get_anim( sk, bindings[i].name ); } -static void player__skate_kill_audio(void){ +void player__skate_kill_audio(void){ audio_lock(); if( player_skate.aud_main ){ player_skate.aud_main = @@ -342,7 +367,8 @@ static int create_jumps_to_hit_target( jump_info *jumps, return valid_count; } -static void player__approximate_best_trajectory(void){ +void player__approximate_best_trajectory(void) +{ world_instance *world0 = world_current_instance(); float k_trace_delta = vg.time_fixed_delta * 10.0f; @@ -1069,10 +1095,11 @@ static void skate_apply_pump_model(void){ } else{ /* Collect */ - float doty = v3_dot( localplayer.rb.to_world[1], state->throw_v ); + f32 doty = v3_dot( localplayer.rb.to_world[1], state->throw_v ); v3f Fl, Fv; v3_muladds( state->throw_v, localplayer.rb.to_world[1], -doty, Fl); + player_skate.collect_feedback = v3_length(Fl) * 4.0f; if( state->activity == k_skate_activity_ground ){ if( v3_length2(localplayer.rb.v)<(20.0f*20.0f) ){ @@ -1083,7 +1110,7 @@ static void skate_apply_pump_model(void){ } v3_muls( localplayer.rb.to_world[1], -doty, Fv ); - v3_muladds( localplayer.rb.v, Fv, k_mmcollect_vert, localplayer.rb.v ); + v3_muladds( localplayer.rb.v, Fv, k_mmcollect_vert, localplayer.rb.v ); v3_muladds( state->throw_v, Fv, k_mmcollect_vert, state->throw_v ); } @@ -1161,7 +1188,7 @@ static enum trick_type player_skate_trick_input(void){ (button_press( k_srbind_trick2 ) ); } -static void player__skate_pre_update(void){ +void player__skate_pre_update(void){ struct player_skate_state *state = &player_skate.state; if( state->activity == k_skate_activity_handplant ){ @@ -1286,7 +1313,7 @@ static void player__skate_pre_update(void){ state->trick_type = k_trick_type_none; } -static void player__skate_comp_audio( void *_animator ){ +void player__skate_comp_audio( void *_animator ){ struct player_skate_animator *animator = _animator; audio_lock(); @@ -1302,7 +1329,7 @@ static void player__skate_comp_audio( void *_animator ){ f32 gate = skaterift.time_rate; if( skaterift.activity == k_skaterift_replay ){ - gate = vg_minf( 1.0f, fabsf(skaterift.track_velocity) ); + gate = vg_minf( 1.0f, fabsf(player_replay.track_velocity) ); } f32 @@ -1430,7 +1457,7 @@ static void player__skate_comp_audio( void *_animator ){ audio_unlock(); } -static void player__skate_post_update(void){ +void player__skate_post_update(void){ struct player_skate_state *state = &player_skate.state; for( int i=0; iactivity == k_skate_activity_handplant ){ + if( state->activity == k_skate_activity_handplant ) return; - } - if( world->water.enabled ){ - if( localplayer.rb.co[1]+0.25f < world->water.height ){ - vg_info( "player fell off due to being in water\n" ); - player__networked_sfx( k_player_subsystem_walk, 32, - k_player_walk_soundeffect_splash, - localplayer.rb.co, 1.0f ); - player__dead_transition( k_player_die_type_generic ); - return; - } - } + if( !world_water_player_safe( world, 0.25f ) ) return; v3_copy( localplayer.rb.co, state->prev_pos ); state->activity_prev = state->activity; @@ -2779,7 +2796,7 @@ begin_collision:; } } -static void player__skate_im_gui(void){ +void player__skate_im_gui(void){ struct player_skate_state *state = &player_skate.state; player__debugtext( 1, "V: %5.2f %5.2f %5.2f",localplayer.rb.v[0], localplayer.rb.v[1], @@ -2824,7 +2841,7 @@ static void player__skate_im_gui(void){ state->trick_euler[2] ); } -static void player__skate_animate(void){ +void player__skate_animate(void){ struct player_skate_state *state = &player_skate.state; struct player_skate_animator *animator = &player_skate.animator; @@ -3113,7 +3130,7 @@ static void player__skate_animate(void){ animator->handplant_t = state->handplant_t; } -static void player__skate_pose( void *_animator, player_pose *pose ){ +void player__skate_pose( void *_animator, player_pose *pose ){ struct skeleton *sk = &localplayer.skeleton; struct player_skate_animator *animator = _animator; @@ -3436,7 +3453,7 @@ static void player__skate_pose( void *_animator, player_pose *pose ){ #endif } -static void player__skate_effects( void *_animator, m4x3f *final_mtx, +void player__skate_effects( void *_animator, m4x3f *final_mtx, struct player_board *board, struct player_effects_data *effect_data ){ struct skeleton *sk = &localplayer.skeleton; @@ -3503,7 +3520,7 @@ static void player__skate_effects( void *_animator, m4x3f *final_mtx, } } -static void player__skate_post_animate(void){ +void player__skate_post_animate(void){ struct player_skate_state *state = &player_skate.state; localplayer.cam_velocity_influence = 1.0f; localplayer.cam_dist = 1.8f; @@ -3515,7 +3532,7 @@ static void player__skate_post_animate(void){ state->head_position, state->head_position ); } -static void player__skate_reset_animator(void){ +void player__skate_reset_animator(void){ struct player_skate_state *state = &player_skate.state; memset( &player_skate.animator, 0, sizeof(player_skate.animator) ); @@ -3526,7 +3543,8 @@ static void player__skate_reset_animator(void){ player_skate.animator.fly = 0.0f; } -static void player__skate_clear_mechanics(void){ +void player__skate_clear_mechanics(void) +{ struct player_skate_state *state = &player_skate.state; state->jump_charge = 0.0f; state->charging_jump = 0; @@ -3561,11 +3579,14 @@ static void player__skate_clear_mechanics(void){ v3_copy( localplayer.rb.to_world[1], player_skate.surface_picture ); v3_copy( localplayer.rb.co, state->prev_pos ); v3_zero( player_skate.weight_distribution ); + + v3f head = { 0.0f, 1.8f, 0.0f }; + m4x3_mulv( localplayer.rb.to_world, head, state->head_position ); } #include "network_compression.h" -static void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ){ +void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ){ struct player_skate_animator *animator = data; bitpack_qv3f( ctx, 24, -1024.0f, 1024.0f, animator->root_co ); @@ -3617,7 +3638,7 @@ static void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ){ bitpack_bytes( ctx, 1, &animator->activity ); } -static void player__skate_sfx_oneshot( u8 id, v3f pos, f32 volume ){ +void player__skate_sfx_oneshot( u8 id, v3f pos, f32 volume ){ audio_lock(); if( id == k_player_skate_soundeffect_jump ){ @@ -3645,5 +3666,3 @@ static void player__skate_sfx_oneshot( u8 id, v3f pos, f32 volume ){ audio_unlock(); } - -#endif /* PLAYER_SKATE_C */