m4x3_expand( transport_i, transport_4 );
m4x4_mul( main_camera.mtx.pv, transport_4, main_camera.mtx.pv );
m4x4_mul( main_camera.mtx.v, transport_4, main_camera.mtx.v );
+
+ /* we want the regular transform here no the inversion */
+ m4x3_expand( transport, transport_4 );
+ m4x4_mul( gate_camera.mtx.pv, transport_4, gate_camera.mtx.pv );
+ m4x4_mul( gate_camera.mtx.v, transport_4, gate_camera.mtx.v );
}
__attribute__ ((deprecated))
-VG_STATIC void gate_rotate_angles( teleport_gate *gate, v3f angles, v3f d )
+VG_STATIC void gate_rotate_angles( ent_gate *gate, v3f angles, v3f d )
{
v3_copy( angles, d );
return;
* Applies gate transport to a player_interface
*/
PLAYER_API
-void player__pass_gate( player_instance *player, teleport_gate *gate )
+void player__pass_gate( player_instance *player, ent_gate *gate )
{
player->gate_waiting = gate;
+ world_routes_activate_entry_gate( get_active_world(), gate );
m4x3_mulv( gate->transport, player->tpv_lpf, player->tpv_lpf );
m3x3_mulv( gate->transport, player->cam_velocity_smooth,
q_normalize( player->qbasis );
q_m3x3( player->qbasis, player->basis );
m3x3_transpose( player->basis, player->invbasis );
+
+ if( gate->type == k_gate_type_nonlocal )
+ world_global.active_world = gate->target;
}
VG_STATIC void player__pre_render( player_instance *player )
player_animation res;
_player_animate[ player->subsystem ]( player, &res );
- /* TODO: eventually, blending code goes here */
-
m4x3f transform;
q_m3x3( res.root_q, transform );
v3_copy( res.root_co, transform[3] );
struct skeleton *sk = &player->playeravatar->sk;
- if( player->holdout_time > 0.0f )
- {
+ if( player->holdout_time > 0.0f ){
skeleton_lerp_pose( sk, res.pose, player->holdout_pose,
player->holdout_time, res.pose );
player->holdout_time -= vg.frame_delta * 2.0f;
skeleton_apply_inverses( sk );
skeleton_apply_transform( sk, transform );
-#if 0
skeleton_debug( sk );
-#endif
}
if( _player_post_animate[ player->subsystem ] )
PLAYER_API void player__render( camera *cam, player_instance *player )
{
- shader_viewchar_use();
+ shader_model_character_view_use();
vg_tex2d_bind( player->playertex, 0 );
- shader_viewchar_uTexMain( 0 );
- shader_viewchar_uCamera( cam->transform[3] );
- shader_viewchar_uPv( cam->mtx.pv );
- shader_link_standard_ub( _shader_viewchar.id, 2 );
- glUniformMatrix4x3fv( _uniform_viewchar_uTransforms,
+ shader_model_character_view_uTexMain( 0 );
+ shader_model_character_view_uCamera( cam->transform[3] );
+ shader_model_character_view_uPv( cam->mtx.pv );
+
+ world_instance *world = get_active_world();
+ world_link_lighting_ub( world, _shader_model_character_view.id );
+ world_bind_position_texture( world, _shader_model_character_view.id,
+ _uniform_model_character_view_g_world_depth, 2 );
+ world_bind_light_array( world, _shader_model_character_view.id,
+ _uniform_model_character_view_uLightsArray, 3 );
+ world_bind_light_index( world, _shader_model_character_view.id,
+ _uniform_model_character_view_uLightsIndex, 4 );
+
+ glUniformMatrix4x3fv( _uniform_model_character_view_uTransforms,
player->playeravatar->sk.bone_count,
0,
(float *)player->playeravatar->sk.final_mtx );
}
PLAYER_API void player__spawn( player_instance *player,
- struct respawn_point *rp )
+ ent_spawn *rp )
{
- v3_copy( rp->co, player->rb.co );
+ v3_copy( rp->transform.co, player->rb.co );
v3_zero( player->rb.v );
v3_zero( player->rb.w );
q_identity( player->rb.q );
m3x3_identity( player->invbasis );
player->subsystem = k_player_subsystem_walk;
+ player->viewable_world = get_active_world();
if( _player_reset[ player->subsystem ] )
_player_reset[ player->subsystem ]( player, rp );