+
+VG_STATIC void world_pct_trigger( mdl_node *pnode )
+{
+ struct trigger_zone *trigger = &world.triggers[ world.trigger_count ];
+ struct classtype_trigger *inf = mdl_get_entdata( world.meta, pnode );
+
+ if( inf->target )
+ {
+ mdl_node *target_node = mdl_node_from_id( world.meta, inf->target );
+
+ trigger->target.sub_id = target_node->sub_uid;
+ trigger->target.classtype = target_node->classtype;
+ }
+ else
+ {
+ vg_warn( "Trigger with no target...\n" );
+ return;
+ }
+
+ mdl_node_transform( pnode, trigger->transform );
+ m4x3_invert_full( trigger->transform, trigger->inv_transform );
+
+ world.trigger_count ++;
+}
+
+
+VG_STATIC void world_pct_relay( mdl_node *pnode )
+{
+ struct logic_relay *relay = &world.logic_relays[ world.relay_count ];
+ struct classtype_logic_relay *inf = mdl_get_entdata( world.meta, pnode );
+
+ relay->target_count = 0;
+
+ for( int i=0; i<vg_list_size(relay->targets); i++ )
+ {
+ if( inf->targets[i] )
+ {
+ struct relay_target *target = &relay->targets[relay->target_count ++];
+ mdl_node *other = mdl_node_from_id( world.meta, inf->targets[i] );
+
+ target->classtype = other->classtype;
+ target->sub_id = other->sub_uid;
+ }
+ }
+
+ v3_copy( pnode->co, relay->pos );
+ world.relay_count ++;
+}
+
+
+VG_STATIC void world_pct_achievement( mdl_node *pnode )
+{
+ struct logic_achievement *ach =
+ &world.logic_achievements[ world.achievement_count ];
+ struct classtype_logic_achievement *inf =
+ mdl_get_entdata( world.meta, pnode );
+
+ v3_copy( pnode->co, ach->pos );
+ ach->achievement_id = mdl_pstr( world.meta, inf->pstr_name );
+ ach->achieved = 0;
+
+ world.achievement_count ++;
+}
+
+