- for( int i=0; i<mworld->node_count; i++ )
- {
- mdl_node *pnode = mdl_node_from_id( mworld, i );
-
- if( pnode->classtype == k_classtype_none )
- {}
- else if( pnode->classtype == k_classtype_gate )
- {
- struct classtype_gate *entgate = mdl_get_entdata( mworld, pnode );
- mdl_node *pother = mdl_node_from_id( mworld, entgate->target );
-
- teleport_gate *gate = &world.gates[ world.gate_count ++ ];
-
- v3_copy( pnode->co, gate->co[0] );
- v3_copy( pother->co, gate->co[1] );
- v4_copy( pnode->q, gate->q[0] );
- v4_copy( pother->q, gate->q[1] );
- v2_copy( pnode->s, gate->dims );
-
- gate_transform_update( gate );
- }
- else if( pnode->classtype == k_classtype_block )
- {
- struct classtype_block *block = mdl_get_entdata( mworld, pnode );
-
- m4x3f transform;
- mdl_node_transform( pnode, transform );
-
- rigidbody *rb = &world.temp_rbs[ world.rb_count ++ ];
-
- box_copy( block->bbx, rb->bbx ); /* TODO: apply scale */
- v3_copy( pnode->co, rb->co );
- rb_init( rb );
- v4_copy( pnode->q, rb->q );
- rb_update_transform( rb );
- }
- else if( pnode->classtype == k_classtype_spawn )
- {
- struct respawn_point *rp = &world.spawns[ world.spawn_count ++ ];
-
- v3_copy( pnode->co, rp->co );
- v4_copy( pnode->q, rp->q );
- strcpy( rp->name, mdl_pstr( mworld, pnode->pstr_name ) );
- }
- else if( pnode->classtype == k_classtype_water )
- {
- if( wrender.enabled )
- {
- vg_warn( "Multiple water surfaces in level! ('%s')\n",
- mdl_pstr( mworld, pnode->pstr_name ));
- continue;
- }
-
- mdl_submesh *sm = mdl_node_submesh( mworld, pnode, 0 );
-
- if( sm )
- {
- glmesh surf;
- mdl_unpack_submesh( mworld, &surf, sm );
- water_init();
- water_set_surface( &surf, pnode->co[1] );
- }
- }
- }
-
- scene_upload( &world.props );
-
- bh_create( &world.bhcubes,
- &bh_system_rigidbodies, world.temp_rbs, world.rb_count );