}
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 );
return;
}
+ if( skaterift.demo_mode ){
+ if( world_static.instance_addons[index]->flags & ADDON_REG_PREMIUM ){
+ vg_error( "Can't switch to a premium world in the demo version\n" );
+ return;
+ }
+ }
+
world_instance *current =
&world_static.instances[ world_static.active_instance ];
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;
-
player__reset();
}
#include "world_water.c"
#include "world_audio.c"
#include "world_routes.c"
-#include "world_traffic.c"
static void world_update( world_instance *world, v3f pos ){
world_render.sky_time += world_render.sky_rate * vg.time_delta;
world_routes_update_timer_texts( world );
world_routes_update( world );
- world_traffic_update( world, pos );
+ ent_traffic_update( world, pos );
world_sfd_update( world, pos );
world_volumes_update( world, pos );
}