skate_apply_air_model( player, s );
skate_integrate( player, s );
+
+ vg_line_pt3( s->state.cog, 0.1f, VG__WHITE );
+ vg_line_pt3( s->state.cog, 0.11f, VG__WHITE );
+ vg_line_pt3( s->state.cog, 0.12f, VG__WHITE );
+ vg_line_pt3( s->state.cog, 0.13f, VG__WHITE );
+ vg_line_pt3( s->state.cog, 0.14f, VG__WHITE );
+
+ vg_line( player->rb.co, s->state.cog, VG__RED );
}
VG_STATIC void player_skate_post_update( player_interface *player,
v3f offset;
v3_zero( offset );
+ m4x3_mulv( player->rb.to_local, s->state.cog, offset );
+ v3_muls( offset, -4.0f, offset );
+
#if 0
m3x3_mulv( player.inv_visual_transform, phys->bob, offset );
#endif
look_dir;
v3_copy( player->rb.v, vel_dir );
- v3_normalize( vel_dir );
+ //v3_normalize( vel_dir );
float tti = s->land_dist;
v3f norm;
v3_copy( player->rb.to_world[1], norm );
}
-
v3_muladds( vel_dir, norm, -v3_dot(vel_dir,norm), flat_dir );
- v3_normalize( flat_dir );
+ //v3_normalize( flat_dir );
v3_lerp( flat_dir, vel_dir, vg_clampf( tti / 2.0f, 0.4f, 1.0f ), look_dir );
- v3_lerp( s->state.vl, look_dir, 8.0f*vg.time_delta, s->state.vl );
+ v3_lerp( s->state.vl, look_dir, 4.0f*vg.time_delta, s->state.vl );
float *v = s->state.vl,
yaw = atan2f( v[0], -v[2] ),
struct player_device_skate *s = at->storage;
m4x3_mulv( gate->transport, player->rb.co, player->rb.co );
+ m3x3_mulv( gate->transport, player->rb.v, player->rb.v );
m4x3_mulv( gate->transport, s->state.cog, s->state.cog );
m3x3_mulv( gate->transport, s->state.cog_v, s->state.cog_v );
- m3x3_mulv( gate->transport, player->rb.v, player->rb.v );
m3x3_mulv( gate->transport, s->state.vl, s->state.vl );
+ m3x3_mulv( gate->transport, s->state.throw_v, s->state.throw_v );
v4f transport_rotation;
m3x3_q( gate->transport, transport_rotation );
q_mul( transport_rotation, player->rb.q, player->rb.q );
+ rb_update_transform( &player->rb );
s->state_gate_storage = s->state;
}
+VG_STATIC void player_skate_reset( player_interface *player,
+ player_attachment *at,
+ struct respawn_point *rp )
+{
+ struct player_device_skate *s = at->storage;
+ v3_muladds( player->rb.co, player->rb.to_world[1], 1.0f, s->state.cog );
+}
+
VG_STATIC player_device player_device_skate =
{
.pre_update = player_skate_pre_update,
.debug_ui = player_skate_ui,
.bind = player_skate_bind,
.pose = player_skate_pose,
- .gate_transport= player_skate_transport
+ .gate_transport= player_skate_transport,
+ .reset = player_skate_reset
};
#endif /* PLAYER_DEVICE_SKATE_H */