X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.c;h=fce9c488aaabf58f4e341881d497de9ede7c296e;hb=7f4c71033c06954f3094c9d51219628438b80ac8;hp=7a31eda047382aba659f289a36f156494b77d5c4;hpb=3749ad2919d75b87c73deb2e8fe7e505cbdcf739;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.c b/player.c index 7a31eda..fce9c48 100644 --- a/player.c +++ b/player.c @@ -11,6 +11,7 @@ #include "network.h" #include "network_common.h" #include "world_routes.h" +#include "ent_miniworld.h" static int localplayer_cmd_respawn( int argc, const char *argv[] ){ ent_spawn *rp = NULL, *r; @@ -66,10 +67,6 @@ static void player__debugtext( int size, const char *fmt, ... ){ /* * Appearence */ -static void player__use_avatar( struct player_avatar *av ){ - localplayer.playeravatar = av; - player_setup_ragdoll_from_avatar( &localplayer.ragdoll, av ); -} static void player__use_model( u16 reg_id ){ addon_cache_unwatch( k_addon_type_player, @@ -146,9 +143,6 @@ static void player__pass_gate( u32 id ){ m4x3_mulv( gate->transport, localplayer.cam.pos, localplayer.cam.pos ); - if( gate->flags & k_ent_gate_nonlocal ) - world_set_active_instance( gate->target ); - audio_lock(); audio_oneshot( &audio_gate_pass, 1.0f, 0.0f ); audio_unlock(); @@ -193,20 +187,16 @@ static void player__im_gui(void){ player__debugtext( 2, "instance #%u", world_static.active_instance ); - char buf_hub[96], - buf_client[96]; - if( world_static.addon_client ) - addon_alias_uid( &world_static.addon_client->alias, buf_client ); - else - strcpy( buf_client, "none" ); + char buf[96]; + for( u32 i=0; ialias, buf ); + else + strcpy( buf, "none" ); - if( world_static.addon_hub ) - addon_alias_uid( &world_static.addon_hub->alias, buf_hub ); - else - strcpy( buf_hub, "none" ); + player__debugtext( 1, "world #%u: %s", i, buf ); + } - player__debugtext( 1, "hub uid: %s", buf_hub ); - player__debugtext( 1, "client uid: %s", buf_client ); player__debugtext( 2, "director" ); player__debugtext( 1, "activity: %s", (const char *[]){ [k_skaterift_menu] = "menu", @@ -227,18 +217,22 @@ static void player__im_gui(void){ skaterift_replay_debug_info(); } - static void player__setpos( v3f pos ){ v3_copy( pos, localplayer.rb.co ); v3_zero( localplayer.rb.v ); rb_update_transform( &localplayer.rb ); } -static void player__spawn( ent_spawn *rp ){ +static void player__reset(void){ replay_clear( &skaterift.replay ); - player__setpos( rp->transform.co ); + + v3_zero( localplayer.rb.v ); v3_zero( localplayer.rb.w ); - q_identity( localplayer.rb.q ); + + f32 l = v4_length( localplayer.rb.q ); + if( (l < 0.9f) || (l > 1.1f) ) + q_identity( localplayer.rb.q ); + rb_update_transform( &localplayer.rb ); q_identity( localplayer.qbasis ); @@ -246,17 +240,19 @@ static void player__spawn( ent_spawn *rp ){ m3x3_identity( localplayer.invbasis ); localplayer.subsystem = k_player_subsystem_walk; + player__walk_reset(); + localplayer.immobile = 0; localplayer.gate_waiting = NULL; - world_static.last_use = 0.0; - world_static.focused_entity = 0; + localplayer.viewable_world = world_current_instance(); + world_static.challenge_target = NULL; world_static.challenge_timer = 0.0f; + world_static.focused_entity = 0; + world_static.active_trigger_volume_count = 0; + world_static.last_use = 0.0; world_entity_unfocus(); - if( player_subsystems[ localplayer.subsystem ]->reset ) - player_subsystems[ localplayer.subsystem ]->reset( rp ); - localplayer.boundary_hash ^= NETMSG_BOUNDARY_BIT; for( u32 i=0; itransform.co ); + player__reset(); +} + static void player__kill(void){ } -static void player__begin_holdout(void){ +static void player__begin_holdout( v3f offset ){ memcpy( &localplayer.holdout_pose, &localplayer.pose, sizeof(localplayer.pose) ); + v3_copy( offset, localplayer.holdout_pose.root_co ); localplayer.holdout_time = 1.0f; }