X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.c;h=d2e8d6f4a671b10926d0770b06896c3736cf06db;hb=0a33f65eecb5e75cddaefa08d3a5eb1a301d0479;hp=4c8f76a755bc2e2f9f31d374085a7f8b199dafc9;hpb=aa4c26eae2208872824e0eb5b71bc05c16d43242;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.c b/player.c index 4c8f76a..d2e8d6f 100644 --- a/player.c +++ b/player.c @@ -176,10 +176,15 @@ VG_STATIC void player_apply_transport_to_cam( m4x3f transport ) 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; @@ -197,9 +202,10 @@ VG_STATIC void gate_rotate_angles( teleport_gate *gate, v3f angles, v3f d ) * 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, @@ -213,6 +219,9 @@ void player__pass_gate( player_instance *player, teleport_gate *gate ) 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 ) @@ -222,16 +231,13 @@ 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; @@ -243,9 +249,7 @@ VG_STATIC void player__pre_render( player_instance *player ) skeleton_apply_inverses( sk ); skeleton_apply_transform( sk, transform ); -#if 0 skeleton_debug( sk ); -#endif } if( _player_post_animate[ player->subsystem ] ) @@ -268,7 +272,16 @@ PLAYER_API void player__render( camera *cam, player_instance *player ) shader_model_character_view_uTexMain( 0 ); shader_model_character_view_uCamera( cam->transform[3] ); shader_model_character_view_uPv( cam->mtx.pv ); - shader_link_standard_ub( _shader_model_character_view.id, 2 ); + + 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, @@ -300,9 +313,9 @@ PLAYER_API void player__im_gui( player_instance *player ) } 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 ); @@ -313,6 +326,7 @@ PLAYER_API void player__spawn( player_instance *player, 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 );