m4x3_invert_affine( localplayer.gate_waiting->transport, inverse );
m4x3_mulv( inverse, localplayer.cam.pos, localplayer.cam.pos );
- struct skeleton *sk = &localplayer.playeravatar->sk;
- skeleton_apply_transform( sk, inverse );
+ skeleton_apply_transform( &localplayer.skeleton, inverse,
+ localplayer.final_mtx );
}
}
}
static void player__cam_iterate(void){
- struct player_avatar *av = localplayer.playeravatar;
struct player_cam_controller *cc = &localplayer.cam_control;
if( localplayer.subsystem == k_player_subsystem_walk ){
/* position */
v3f fpv_pos, fpv_offset;
- m4x3_mulv( av->sk.final_mtx[ av->id_head-1 ],
+ m4x3_mulv( localplayer.final_mtx[ localplayer.id_head-1 ],
cc->fpv_viewpoint_smooth, fpv_pos );
m3x3_mulv( localplayer.rb.to_world, cc->fpv_offset_smooth, fpv_offset );
v3_add( fpv_offset, fpv_pos, fpv_pos );
v3f pco;
v4f pq;
rb_extrapolate( &localplayer.rb, pco, pq );
+ v3_muladds( pco, localplayer.holdout_pose.root_co,
+ localplayer.holdout_time, pco );
v3_lerp( cc->tpv_lpf, pco, 20.0f*vg.time_frame_delta, cc->tpv_lpf );
/* now move into world */
v3_muladds( tpv_offset, cc->cam_velocity_smooth, -0.025f, tpv_offset );
v3_add( tpv_origin, tpv_offset, tpv_pos );
-#if 0
- f32 t; v3f n;
- if( spherecast_world( world_current_instance(), tpv_origin, tpv_pos,
- 0.2f, &t, n ) != -1 ){
- v3_lerp( tpv_origin, tpv_pos, t, tpv_pos );
- }
-#endif
/*
* Blend cameras