}
static void world_switch_instance( u32 index ){
- assert( localplayer.subsystem == k_player_subsystem_walk );
+ localplayer.subsystem = k_player_subsystem_walk;
if( index >= vg_list_size(world_static.instances) ){
vg_error( "Instance ID out of range (%u)\n", index );
if( index != world_static.active_instance ){
v3_copy( localplayer.rb.co, current->player_co );
- v3_copy( localplayer.angles, current->player_angles );
- v3_copy( localplayer.cam.pos, current->cam_co );
- current->player_angles[3] = player_get_heading_yaw();
+ skaterift_autosave(1);
}
v3_copy( new->player_co, localplayer.rb.co );
- v3_copy( new->player_angles, localplayer.angles );
- v3_copy( new->cam_co, localplayer.cam.pos );
- q_axis_angle( localplayer.rb.q, (v3f){0,1,0}, new->player_angles[3] );
-
- /* run exit events on triggers */
- for( u32 i=0; i<world_static.active_trigger_volume_count; i++ ){
- i32 idx = world_static.active_trigger_volumes[i];
- ent_volume *volume = mdl_arritm( ¤t->ent_volume, idx );
-
- ent_call basecall;
- basecall.function = k_ent_function_trigger_leave;
- basecall.id = mdl_entity_id( k_ent_volume, idx );
- basecall.data = NULL;
- entity_call( current, &basecall );
- }
world_static.active_instance = index;