public static void Setup6mSteelMesh(NetInfo info, NetInfoVersion version, NetInfo elevatedInfo) { var elevatedMaterial = elevatedInfo.m_segments[0].m_material; var elevatedLODMaterial = elevatedInfo.m_segments[0].m_lodMaterial; var trainTrackInfo = Prefabs.Find <NetInfo>("Train Track"); var railMaterial = trainTrackInfo.m_segments[1].m_material; var railLODMaterial = trainTrackInfo.m_segments[1].m_lodMaterial; var brElInfo = Prefabs.Find <NetInfo>("Basic Road Elevated"); var defaultElMaterial = brElInfo.m_segments[0].m_material; var defaultElLODMaterial = brElInfo.m_segments[0].m_lodMaterial; var isTwoWay = info.name.Contains("Two-Way"); var nodeList = new List <NetInfo.Node>(); switch (version) { case NetInfoVersion.Ground: { var segments0 = info.m_segments[0].ShallowClone(); var segments1 = info.m_segments[1].ShallowClone(); var segments3 = info.m_segments[0].ShallowClone(); var nodes0 = info.m_nodes[0].ShallowClone(); nodeList.Add(nodes0); segments0 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Pavement.obj", @"Meshes\6m\Ground_Pavement_LOD.obj"); segments1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj"); segments3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); nodes0 .SetMeshes (@"Meshes\6m\Ground_Node_Pavement.obj", @"Meshes\6m\Ground_Node_Pavement_LOD.obj"); RoadHelper.HandleAsymSegmentFlags(segments3); segments3.m_material = railMaterial; segments3.m_lodMaterial = railLODMaterial; info.m_segments = new[] { segments0, segments1, /*segments2*/ segments3 }; break; } case NetInfoVersion.Elevated: { var segment0 = info.m_segments[0].ShallowClone(); var segment1 = info.m_segments[1].ShallowClone(); var segment2 = info.m_segments[0].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var node0 = info.m_nodes[0].ShallowClone(); var node11 = info.m_nodes[0].ShallowClone(); segment0 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Elevated_Pavement_Steel.obj", @"Meshes\6m\Elevated_Pavement_Steel_LOD.obj") .SetConsistentUVs(); segment1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Elevated_ThirdRail_Base.obj", @"Meshes\6m\Blank.obj") .SetConsistentUVs(); node0 .SetFlags(NetNode.Flags.None, NetNode.Flags.Transition) .SetMeshes (@"Meshes\6m\Elevated_Node_Pavement_Steel.obj", @"Meshes\6m\Elevated_Node_Pavement_Steel_LOD.obj") .SetConsistentUVs(); node11 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes (@"Meshes\6m\Elevated_Trans_Pavement_Steel.obj", @"Meshes\6m\Elevated_Node_Pavement_Steel_LOD.obj") .SetConsistentUVs(); nodeList.Add(node0); nodeList.Add(node11); RoadHelper.HandleAsymSegmentFlags(segment2); RoadHelper.HandleAsymSegmentFlags(segment3); segment0.m_material = elevatedMaterial; segment0.m_lodMaterial = elevatedLODMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node0.m_material = elevatedMaterial; node0.m_lodMaterial = elevatedLODMaterial; node11.m_material = elevatedMaterial; node11.m_lodMaterial = elevatedLODMaterial; info.m_segments = new[] { segment0, segment1, segment2, segment3 }; break; } case NetInfoVersion.Bridge: { var segment1 = info.m_segments[1].ShallowClone(); var segment2 = info.m_segments[0].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var node3 = info.m_nodes[0].ShallowClone(); //var node9 = info.m_nodes[0].ShallowClone(); nodeList.Add(node3); //nodeList.Add(node9); segment1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj"); segment2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Elevated_ThirdRail_Base.obj", @"Meshes\6m\Blank.obj") .SetConsistentUVs(); node3 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes (@"Meshes\6m\Elevated_Trans_Pavement_Steel.obj", @"Meshes\6m\Elevated_Node_Pavement_Steel_LOD.obj") .SetConsistentUVs(); //node9 // .SetMeshes // (@"Meshes\6m\Elevated_Node_Pavement_Steel_Insert.obj", @"Meshes\6m\Blank.obj") // .SetConsistentUVs(); segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node3.m_material = elevatedMaterial; node3.m_lodMaterial = elevatedLODMaterial; //node9.m_material = elevatedMaterial; //node9.m_lodMaterial = elevatedLODMaterial; //node9.m_directConnect = true; RoadHelper.HandleAsymSegmentFlags(segment2); RoadHelper.HandleAsymSegmentFlags(segment3); info.m_segments = new[] { segment1, segment2, segment3 }; break; } case NetInfoVersion.Slope: { var segment0 = info.m_segments[0].ShallowClone(); var segment1 = info.m_segments[1].ShallowClone(); var segment2 = info.m_segments[0].ShallowClone(); var segment3 = info.m_segments[3].ShallowClone(); var segment4 = info.m_segments[3].ShallowClone(); var node0 = info.m_nodes[0].ShallowClone(); var node2 = info.m_nodes[1].ShallowClone(); var node3 = info.m_nodes[3].ShallowClone(); var node5 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node2); nodeList.Add(node3); nodeList.Add(node5); segment0 .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Gray.obj", @"Meshes\6m\Tunnel_Pavement_Gray_LOD.obj"); segment1 .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj"); segment2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Slope_Pavement_Steel.obj", @"Meshes\6m\Slope_Pavement_LOD.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Slope_Pavement_Steel_Ground.obj", @"Meshes\10m\Blank.obj"); node0 .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Gray.obj", @"Meshes\6m\Tunnel_Pavement_Gray_LOD.obj"); node2 .SetFlags(NetNode.Flags.Underground, NetNode.Flags.None) .SetMeshes (@"Meshes\6m\Boosted_Rail.obj", @"Meshes\6m\Blank.obj") .SetConsistentUVs(); node3 .SetMeshes (@"Meshes\6m\Slope_Node_Pavement_Steel.obj", @"Meshes\6m\Slope_Node_Pavement_LOD.obj") .SetConsistentUVs(); node5 .SetMeshes (@"Meshes\6m\Tunnel_Node_Pavement_Steel.obj", @"Meshes\6m\Tunnel_Node_Pavement_LOD.obj") .SetConsistentUVs(); segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; segment3.m_material = elevatedMaterial; segment3.m_lodMaterial = elevatedLODMaterial; segment4.m_material = elevatedMaterial; segment4.m_lodMaterial = elevatedLODMaterial; node2.m_connectGroup = info.m_connectGroup; node3.m_material = elevatedMaterial; node3.m_lodMaterial = elevatedLODMaterial; node5.m_material = elevatedMaterial; node5.m_lodMaterial = elevatedLODMaterial; info.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; break; } case NetInfoVersion.Tunnel: { var metroInfo = PrefabCollection <NetInfo> .FindLoaded("Metro Track"); var segment0 = metroInfo.m_segments[0].ShallowClone(); var segment1 = info.m_segments[0].ShallowClone(); var segment2 = info.m_segments[0].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var segment4 = info.m_segments[0].ShallowClone(); var node0 = metroInfo.m_nodes[0].ShallowClone(); var node1 = info.m_nodes[0].ShallowClone(); var node2 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node1); nodeList.Add(node2); segment0 .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Steel_Gray.obj", @"Meshes\6m\Tunnel_Pavement_Steel_Gray_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Steel.obj", @"Meshes\6m\Tunnel_Pavement_Steel_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj"); segment3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Steel_Ground.obj", @"Meshes\6m\Blank.obj"); node0 .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Gray.obj", @"Meshes\6m\Tunnel_Pavement_Gray_LOD.obj"); node1 .SetFlags(NetNode.Flags.None, NetNode.Flags.Transition) .SetMeshes (@"Meshes\6m\Tunnel_Node_Pavement_Steel.obj", @"Meshes\6m\Tunnel_Node_Pavement_Steel_LOD.obj") .SetConsistentUVs(); node2 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes ($@"Meshes\6m\Tunnel_Trans_Pavement_Steel.obj", $@"Meshes\6m\Tunnel_Node_Pavement_LOD.obj") .SetConsistentUVs(); segment1.m_material = defaultElMaterial; segment1.m_lodMaterial = defaultElLODMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; segment3.m_material = railMaterial; segment3.m_lodMaterial = railLODMaterial; segment4.m_material = defaultElMaterial; segment4.m_lodMaterial = defaultElLODMaterial; node1.m_material = elevatedMaterial; node1.m_lodMaterial = elevatedLODMaterial; node2.m_material = elevatedMaterial; node2.m_lodMaterial = elevatedLODMaterial; RoadHelper.HandleAsymSegmentFlags(segment1); RoadHelper.HandleAsymSegmentFlags(segment3); RoadHelper.HandleAsymSegmentFlags(segment4); info.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; break; } } for (int i = 0; i < nodeList.Count; i++) { nodeList[i].m_flagsForbidden |= NetNode.Flags.LevelCrossing; } nodeList.AddRange(SetupMeshUtil.GenerateSplitTracksAndLevelCrossings(info, version)); info.m_nodes = nodeList.ToArray(); }
public static void Setup6mStationSteelMesh(NetInfo prefab, NetInfoVersion version, NetInfo elevatedInfo, NetInfo metroStationInfo) { var elevatedMaterial = elevatedInfo.m_segments[0].m_material; var elevatedLODMaterial = elevatedInfo.m_segments[0].m_lodMaterial; var trainTrackInfo = Prefabs.Find <NetInfo>("Train Track"); var railMaterial = trainTrackInfo.m_segments[1].m_material; var railLODMaterial = trainTrackInfo.m_segments[1].m_lodMaterial; var isTwoWay = prefab.name.Contains("Two-Way"); var nodeList = new List <NetInfo.Node>(); switch (version) { case NetInfoVersion.Ground: { var segment0 = prefab.m_segments[0].ShallowClone(); var segment1 = prefab.m_segments[1].ShallowClone(); var segment2 = prefab.m_segments[0].ShallowClone(); var node0 = prefab.m_nodes[0].ShallowClone(); nodeList.Add(node0); segment0 .SetMeshes (@"Meshes\6m\Ground_Station_Pavement.obj", @"Meshes\6m\Ground_Pavement_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); node0 .SetMeshes (@"Meshes\6m\Ground_Node_Pavement.obj", @"Meshes\6m\Ground_Node_Pavement_LOD.obj"); RoadHelper.HandleAsymSegmentFlags(segment2); segment0.m_material = elevatedMaterial; segment0.m_lodMaterial = elevatedLODMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node0.m_material = elevatedMaterial; node0.m_lodMaterial = elevatedLODMaterial; prefab.m_segments = new[] { segment0, segment1, segment2 }; break; } case NetInfoVersion.Elevated: { var segment0 = prefab.m_segments[0].ShallowClone(); var segment1 = prefab.m_segments[1].ShallowClone(); var segment2 = prefab.m_segments[0].ShallowClone(); var segment3 = prefab.m_segments[0].ShallowClone(); var node0 = prefab.m_nodes[0].ShallowClone(); var node11 = prefab.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node11); segment0 .SetMeshes (@"Meshes\6m\Elevated_Station_Pavement_Steel.obj", @"Meshes\6m\Elevated_Station_Pavement_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Elevated_ThirdRail_Base.obj", @"Meshes\6m\Blank.obj") .SetConsistentUVs(); node0 .SetMeshes (@"Meshes\6m\Elevated_Station_Node_Pavement_Steel.obj", @"Meshes\6m\Elevated_Station_Node_Pavement_LOD.obj") .SetConsistentUVs(); node11 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes (@"Meshes\6m\Elevated_Trans_Pavement_Steel.obj", @"Meshes\6m\Elevated_Node_Pavement_Steel_LOD.obj") .SetConsistentUVs(); RoadHelper.HandleAsymSegmentFlags(segment2); RoadHelper.HandleAsymSegmentFlags(segment3); segment0.m_material = elevatedMaterial; segment0.m_lodMaterial = elevatedLODMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node0.m_material = elevatedMaterial; node0.m_lodMaterial = elevatedLODMaterial; node11.m_material = elevatedMaterial; node11.m_lodMaterial = elevatedLODMaterial; prefab.m_segments = new[] { segment0, segment1, segment2, segment3 }; break; } } //if (version == NetInfoVersion.Ground || version == NetInfoVersion.Elevated) { // nodeList[0].m_flagsForbidden |= NetNode.Flags.End; //} for (int i = 0; i < nodeList.Count; i++) { nodeList[i].m_flagsForbidden |= NetNode.Flags.LevelCrossing; } nodeList.AddRange(SetupMeshUtil.GenerateSplitTracksAndLevelCrossings(prefab, version)); prefab.m_nodes = nodeList.ToArray(); }
public static void Setup10mStationMesh(NetInfo prefab, NetInfoVersion version, NetInfo elevatedInfo, NetInfo metroStationInfo) { var trainTrackInfo = Prefabs.Find <NetInfo>("Train Track"); var elevatedMaterial = elevatedInfo.m_segments[0].m_material; var elevatedLODMaterial = elevatedInfo.m_segments[0].m_lodMaterial; var railMaterial = trainTrackInfo.m_segments[1].m_material; var railLODMaterial = trainTrackInfo.m_segments[1].m_lodMaterial; var width = prefab.name.Contains("Large") ? "18m" : "10m"; var nodeList = new List <NetInfo.Node>(); switch (version) { case NetInfoVersion.Ground: { var segment0 = prefab.m_segments[0].ShallowClone(); var segment1 = prefab.m_segments[1].ShallowClone(); var segment2 = prefab.m_segments[0].ShallowClone(); var node0 = prefab.m_nodes[0].ShallowClone(); var node4 = prefab.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node4); segment0 .SetMeshes ($@"Meshes\{width}\Ground_Station_Pavement.obj", $@"Meshes\{width}\Ground_Pavement_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Rail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); node0 .SetMeshes ($@"Meshes\{width}\Ground_Node_Pavement.obj", $@"Meshes\{width}\Ground_Node_Pavement_LOD.obj"); node4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment0.m_material = elevatedMaterial; segment0.m_lodMaterial = elevatedLODMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node0.m_material = elevatedMaterial; node0.m_lodMaterial = elevatedLODMaterial; node4.m_material = railMaterial; node4.m_lodMaterial = railLODMaterial; prefab.m_segments = new[] { segment0, segment1, segment2 }; break; } case NetInfoVersion.Elevated: { var segment0 = prefab.m_segments[0].ShallowClone(); var segment1 = prefab.m_segments[0].ShallowClone(); var segment2 = prefab.m_segments[0].ShallowClone(); var segment3 = prefab.m_segments[1].ShallowClone(); var node0 = prefab.m_nodes[0].ShallowClone(); var node2 = prefab.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node2); segment0 .SetMeshes ($@"Meshes\{width}\Elevated_Station_Pavement.obj", $@"Meshes\{width}\Elevated_Station_Pavement_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Boosted_Station_Rail.obj", $@"Meshes\{width}\Blank.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Rail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); node0 .SetMeshes ($@"Meshes\{width}\Elevated_Station_Node_Pavement.obj", $@"Meshes\{width}\Elevated_Station_Node_Pavement_LOD.obj"); node2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment0.m_material = elevatedMaterial; segment0.m_lodMaterial = elevatedLODMaterial; segment1.m_material = elevatedMaterial; segment1.m_lodMaterial = elevatedLODMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node0.m_material = elevatedMaterial; node0.m_lodMaterial = elevatedLODMaterial; node2.m_material = railMaterial; node2.m_lodMaterial = railLODMaterial; prefab.m_segments = new[] { segment0, segment1, segment2, segment3 }; break; } case NetInfoVersion.Tunnel: { var segment0 = metroStationInfo.m_segments[0].ShallowClone(); var segment1 = metroStationInfo.m_segments[0].ShallowClone(); var segment2 = metroStationInfo.m_segments[0].ShallowClone(); var segment3 = metroStationInfo.m_segments[0].ShallowClone(); var segment4 = metroStationInfo.m_segments[0].ShallowClone(); var node0 = metroStationInfo.m_nodes[0].ShallowClone(); var node1 = metroStationInfo.m_nodes[0].ShallowClone(); var node3 = metroStationInfo.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node1); nodeList.Add(node3); segment0 .SetMeshes ($@"Meshes\{width}\Tunnel_Station_Pavement_Gray.obj", $@"Meshes\{width}\Tunnel_Station_Pavement_Gray_LOD.obj"); segment1 .SetMeshes ($@"Meshes\{width}\Tunnel_Station_Pavement.obj", $@"Meshes\{width}\Tunnel_Pavement_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Boosted_Station_Rail.obj", $@"Meshes\{width}\Blank.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Station_Rail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); node0 .SetMeshes ($@"Meshes\{width}\Tunnel_Station_Pavement_Gray.obj", $@"Meshes\{width}\Tunnel_Station_Pavement_Gray_LOD.obj"); node1 .SetMeshes ($@"Meshes\{width}\Tunnel_Station_Node_Pavement.obj", $@"Meshes\{width}\Tunnel_Node_Pavement_LOD.obj") .SetConsistentUVs(); node3 .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment1.m_material = elevatedMaterial; segment1.m_lodMaterial = elevatedLODMaterial; segment2.m_material = elevatedMaterial; segment2.m_lodMaterial = elevatedLODMaterial; segment3.m_material = railMaterial; segment3.m_lodMaterial = railLODMaterial; segment4.m_material = railMaterial; segment4.m_lodMaterial = railLODMaterial; node1.m_material = elevatedMaterial; node1.m_lodMaterial = elevatedLODMaterial; node3.m_material = railMaterial; node3.m_lodMaterial = railLODMaterial; prefab.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; break; } } //if (version == NetInfoVersion.Ground || version == NetInfoVersion.Elevated) { // nodeList[0].m_flagsForbidden |= NetNode.Flags.End; //} for (int i = 0; i < nodeList.Count; i++) { nodeList[i].m_flagsForbidden |= NetNode.Flags.LevelCrossing; } nodeList.AddRange(SetupMeshUtil.GenerateSplitTracksAndLevelCrossings(prefab, version)); prefab.m_nodes = nodeList.ToArray(); }
public static void Setup10mMesh(NetInfo info, NetInfoVersion version, NetInfo elevatedInfo, NetInfo metroInfo) { var isOneWay = info.name.Contains("One-Way"); var isLarge = info.name.Contains("Large"); var width = isLarge ? "18m" : "10m"; var brElInfo = Prefabs.Find <NetInfo>("Basic Road Elevated"); var trainTrackInfo = Prefabs.Find <NetInfo>("Train Track"); var elevatedbrMaterial = brElInfo.m_segments[0].m_lodMaterial; var elevatedMaterial = elevatedInfo.m_segments[0].m_material; var elevatedLODMaterial = elevatedInfo.m_segments[0].m_lodMaterial; var railMaterial = trainTrackInfo.m_segments[1].m_material; var railLODMaterial = trainTrackInfo.m_segments[1].m_lodMaterial; var nodeList = new List <NetInfo.Node>(); switch (version) { case NetInfoVersion.Ground: { var segment0 = info.m_segments[0].ShallowClone(); var segment1 = info.m_segments[1].ShallowClone(); var segment2 = info.m_segments[0].ShallowClone(); var node0 = info.m_nodes[0].ShallowClone(); var node4 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node4); segment0 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Ground_Pavement.obj", $@"Meshes\{width}\Ground_Pavement_LOD.obj"); //if (isLarge) //{ segment1 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Rail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); //} //else //{ // segment1 // .SetFlagsDefault() // .SetMeshes // ($@"Meshes\{width}\Rail.obj") // .SetConsistentUVs(); //} segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); node0 .SetMeshes ($@"Meshes\{width}\Ground_Node_Pavement.obj", $@"Meshes\{width}\Ground_Node_Pavement_LOD.obj"); node4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node4.m_material = railMaterial; node4.m_lodMaterial = railLODMaterial; info.m_segments = new[] { segment0, segment1, segment2 }; break; } case NetInfoVersion.Elevated: { var segment0 = info.m_segments[0].ShallowClone(); var segment1 = info.m_segments[0].ShallowClone(); var segment2 = info.m_segments[1].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var segment4 = info.m_segments[1].ShallowClone(); var node0 = info.m_nodes[0].ShallowClone(); var node2 = info.m_nodes[0].ShallowClone(); var node4 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node2); nodeList.Add(node4); segment0 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Elevated_Pavement.obj", $@"Meshes\{width}\Elevated_Pavement_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Boosted_Rail.obj", $@"Meshes\{width}\Blank.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Rail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Elevated_RailGuards.obj", $@"Meshes\{width}\Blank.obj") .SetConsistentUVs(); node0 .SetFlags(NetNode.Flags.None, NetNode.Flags.Transition) .SetMeshes ($@"Meshes\{width}\Elevated_Node_Pavement.obj", $@"Meshes\{width}\Elevated_Node_Pavement_LOD.obj"); node2 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes ($@"Meshes\{width}\Elevated_Trans_Pavement.obj", $@"Meshes\{width}\Elevated_Node_Pavement_LOD.obj"); node4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment0.m_material = elevatedMaterial; segment0.m_lodMaterial = elevatedbrMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; node0.m_material = elevatedMaterial; node0.m_lodMaterial = elevatedbrMaterial; node2.m_material = elevatedMaterial; node2.m_lodMaterial = elevatedLODMaterial; node4.m_material = railMaterial; node4.m_lodMaterial = railLODMaterial; info.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; break; } case NetInfoVersion.Bridge: { var segment0 = info.m_segments[0].ShallowClone(); var segment1 = info.m_segments[0].ShallowClone(); var segment2 = info.m_segments[1].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var segment4 = info.m_segments[1].ShallowClone(); var node0 = info.m_nodes[0].ShallowClone(); var node2 = info.m_nodes[0].ShallowClone(); var node4 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node2); nodeList.Add(node4); segment0 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Bridge_Pavement.obj", $@"Meshes\{width}\Bridge_Pavement_LOD.obj") .SetConsistentUVs(); segment1 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Boosted_Rail.obj", $@"Meshes\{width}\Blank.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Rail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Elevated_RailGuards.obj", $@"Meshes\{width}\Blank.obj") .SetConsistentUVs(); node0 .SetFlags(NetNode.Flags.None, NetNode.Flags.Transition) .SetMeshes ($@"Meshes\{width}\Bridge_Node_Pavement.obj", $@"Meshes\{width}\Bridge_Node_Pavement_LOD.obj") .SetConsistentUVs(); node2 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes ($@"Meshes\{width}\Bridge_Trans_Pavement.obj", $@"Meshes\{width}\Bridge_Node_Pavement_LOD.obj") .SetConsistentUVs(); node4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment0.m_material = elevatedMaterial; segment0.m_lodMaterial = elevatedbrMaterial; segment2.m_material = railMaterial; segment2.m_lodMaterial = railLODMaterial; segment3.m_material = elevatedMaterial; segment3.m_lodMaterial = elevatedbrMaterial; node0.m_material = elevatedMaterial; node0.m_lodMaterial = elevatedbrMaterial; node2.m_material = elevatedMaterial; node2.m_lodMaterial = elevatedLODMaterial; node4.m_material = railMaterial; node4.m_lodMaterial = railLODMaterial; info.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; break; } case NetInfoVersion.Slope: { var segment0 = metroInfo.m_segments[0].ShallowClone(); var segment1 = info.m_segments[3].ShallowClone(); var segment2 = info.m_segments[3].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var segment4 = info.m_segments[1].ShallowClone(); var node0 = metroInfo.m_nodes[0].ShallowClone(); var node2 = info.m_nodes[3].ShallowClone(); var node5 = info.m_nodes[0].ShallowClone(); var node7 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node2); nodeList.Add(node5); nodeList.Add(node7); segment0 .SetMeshes ($@"Meshes\{width}\Tunnel_Pavement_Gray.obj", $@"Meshes\{width}\Tunnel_Pavement_Gray_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Boosted_Rail.obj", $@"Meshes\{width}\Blank.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Rail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Slope_Pavement.obj", $@"Meshes\{width}\Slope_Pavement_LOD.obj") .SetConsistentUVs(); segment3 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); node0 .SetMeshes ($@"Meshes\{width}\Tunnel_Pavement_Gray.obj", $@"Meshes\{width}\Tunnel_Pavement_Gray_LOD.obj"); node2 .SetMeshes ($@"Meshes\{width}\Slope_Node_Pavement.obj", $@"Meshes\{width}\Slope_Node_Pavement_LOD.obj") .SetConsistentUVs(); node5 .SetMeshes ($@"Meshes\{width}\Slope_U_Node_Pavement.obj", $@"Meshes\{width}\Tunnel_Node_Pavement_LOD.obj") .SetConsistentUVs(); node7 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment2.m_material = elevatedMaterial; segment2.m_lodMaterial = elevatedLODMaterial; segment3.m_material = railMaterial; segment3.m_lodMaterial = railLODMaterial; node2.m_material = elevatedMaterial; node2.m_lodMaterial = elevatedLODMaterial; node5.m_material = elevatedMaterial; node5.m_lodMaterial = elevatedLODMaterial; node7.m_material = railMaterial; node7.m_lodMaterial = railLODMaterial; //node6.m_connectGroup = info.m_connectGroup; info.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; break; } case NetInfoVersion.Tunnel: { var segment0 = metroInfo.m_segments[0].ShallowClone(); var segment1 = info.m_segments[0].ShallowClone(); var segment2 = info.m_segments[0].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var segment4 = info.m_segments[0].ShallowClone(); var node0 = metroInfo.m_nodes[0].ShallowClone(); var node1 = info.m_nodes[0].ShallowClone(); var node3 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node1); nodeList.Add(node3); segment0 .SetMeshes ($@"Meshes\{width}\Tunnel_Pavement_Gray.obj", $@"Meshes\{width}\Tunnel_Pavement_Gray_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Tunnel_Pavement.obj", $@"Meshes\{width}\Tunnel_Pavement_LOD.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Boosted_Rail.obj"); segment3 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\ThirdRail.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes ($@"Meshes\{width}\Rail.obj"); node0 .SetMeshes ($@"Meshes\{width}\Tunnel_Pavement_Gray.obj", $@"Meshes\{width}\Tunnel_Pavement_Gray_LOD.obj"); node1 .SetMeshes ($@"Meshes\{width}\Tunnel_Node_Pavement.obj", $@"Meshes\{width}\Tunnel_Node_Pavement_LOD.obj") .SetConsistentUVs(); node3 .SetMeshes ($@"Meshes\{width}\ThirdRail_Node.obj", $@"Meshes\{width}\Rail_LOD.obj") .SetConsistentUVs(); RoadHelper.HandleAsymSegmentFlags(segment1); segment1.m_material = elevatedbrMaterial; segment1.m_lodMaterial = elevatedLODMaterial; segment2.m_material = elevatedbrMaterial; segment2.m_lodMaterial = elevatedLODMaterial; segment3.m_material = railMaterial; segment3.m_lodMaterial = railLODMaterial; segment4.m_material = railMaterial; segment4.m_lodMaterial = railLODMaterial; node1.m_material = elevatedMaterial; node1.m_lodMaterial = elevatedLODMaterial; node3.m_material = railMaterial; node3.m_lodMaterial = railLODMaterial; info.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; break; } } for (int i = 0; i < nodeList.Count; i++) { nodeList[i].m_flagsForbidden |= NetNode.Flags.LevelCrossing; } nodeList.AddRange(SetupMeshUtil.GenerateSplitTracksAndLevelCrossings(info, version)); info.m_nodes = nodeList.ToArray(); }
public static void Setup6mMesh(this NetInfo info, NetInfoVersion version) { var ttInfo = Prefabs.Find <NetInfo>("Train Track"); var brElInfo = Prefabs.Find <NetInfo>("Basic Road Elevated"); //var ttElInfo = Prefabs.Find<NetInfo>("Train Track Elevated"); var defaultMaterial = brElInfo.m_segments[0].m_material; var defaultLODMaterial = brElInfo.m_segments[0].m_lodMaterial; var railMaterial = ttInfo.m_segments[1].m_material; var railLODMaterial = ttInfo.m_segments[1].m_lodMaterial; var isTwoWay = info.name.Contains("Two-Way"); var nodeList = new List <NetInfo.Node>(); switch (version) { case NetInfoVersion.Ground: { var segments0 = info.m_segments[0].ShallowClone(); var segments1 = info.m_segments[1].ShallowClone(); var segments3 = info.m_segments[1].ShallowClone(); var nodes0 = info.m_nodes[0].ShallowClone(); nodeList.Add(nodes0); segments0 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Pavement.obj", @"Meshes\6m\Ground_Pavement_LOD.obj"); segments1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Ground_Rail.obj", @"Meshes\6m\Rail_LOD.obj"); segments3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", $@"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); nodes0 .SetMeshes (@"Meshes\6m\Ground_Node_Pavement.obj", @"Meshes\6m\Ground_Node_Pavement_LOD.obj"); RoadHelper.HandleAsymSegmentFlags(segments3); info.m_segments = new[] { segments0, segments1, /*segments2*/ segments3 }; break; } case NetInfoVersion.Elevated: { var segments0 = info.m_segments[0].ShallowClone(); var segments1 = info.m_segments[0].ShallowClone(); var segments2 = info.m_segments[1].ShallowClone(); var segments3 = info.m_segments[0].ShallowClone(); var segments4 = info.m_segments[0].ShallowClone(); var nodes0 = info.m_nodes[0].ShallowClone(); var nodes2 = info.m_nodes[0].ShallowClone(); nodeList.Add(nodes0); nodeList.Add(nodes2); segments0 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Elevated_Pavement.obj", @"Meshes\6m\Elevated_Pavement_LOD.obj"); segments1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Boosted_Rail.obj", @"Meshes\10m\Blank.obj"); segments2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Rail.obj", @"Meshes\6m\Rail_LOD.obj"); segments3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", $@"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segments4 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Elevated_RailGuards.obj", @"Meshes\10m\Blank.obj") .SetConsistentUVs(); nodes0 .SetFlags(NetNode.Flags.None, NetNode.Flags.Transition) .SetMeshes (@"Meshes\6m\Elevated_Pavement.obj", @"Meshes\6m\Elevated_Node_Pavement_LOD.obj"); nodes2 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes (@"Meshes\6m\Elevated_Trans_Pavement.obj", @"Meshes\6m\Elevated_Node_Pavement_LOD.obj"); RoadHelper.HandleAsymSegmentFlags(segments3); segments0.m_material = defaultMaterial; segments0.m_lodMaterial = defaultLODMaterial; segments3.m_material = railMaterial; segments3.m_lodMaterial = railLODMaterial; segments4.m_material = defaultMaterial; segments4.m_lodMaterial = defaultLODMaterial; nodes0.m_material = defaultMaterial; nodes0.m_lodMaterial = defaultLODMaterial; nodes2.m_material = defaultMaterial; nodes2.m_lodMaterial = defaultLODMaterial; info.m_segments = new[] { segments0, segments1, segments2, segments3, segments4 }; break; } case NetInfoVersion.Bridge: { var segments0 = info.m_segments[0].ShallowClone(); var segments1 = info.m_segments[0].ShallowClone(); var segments2 = info.m_segments[1].ShallowClone(); var segments3 = info.m_segments[1].ShallowClone(); var segments4 = info.m_segments[0].ShallowClone(); var nodes0 = info.m_nodes[0].ShallowClone(); var nodes2 = info.m_nodes[0].ShallowClone(); nodeList.Add(nodes0); nodeList.Add(nodes2); segments0 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Bridge_Pavement.obj", @"Meshes\6m\Bridge_Pavement_LOD.obj"); segments1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Boosted_Rail.obj", @"Meshes\10m\Blank.obj"); segments2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Rail.obj", @"Meshes\6m\Rail_LOD.obj"); segments3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", $@"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segments4 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Elevated_RailGuards.obj", @"Meshes\10m\Blank.obj") .SetConsistentUVs(); nodes0 .SetFlags(NetNode.Flags.None, NetNode.Flags.Transition) .SetMeshes (@"Meshes\6m\Bridge_Node_Pavement.obj", @"Meshes\6m\Elevated_Node_Pavement_LOD.obj") .SetConsistentUVs(); nodes2 .SetFlags(NetNode.Flags.Transition, NetNode.Flags.None) .SetMeshes (@"Meshes\6m\Bridge_Trans_Pavement.obj", @"Meshes\6m\Elevated_Node_Pavement_LOD.obj") .SetConsistentUVs(); var segmentNormals = segments0.m_mesh.normals; var segmentVertices = segments0.m_mesh.vertices; var colors = new List <UnityEngine.Color>(); var colors32 = new List <UnityEngine.Color32>(); for (int i = 0; i < segments0.m_mesh.vertexCount; i++) { if (segmentNormals[i].y == 1 && segmentVertices[i].y == 0) { colors.Add(new UnityEngine.Color(255, 255, 255, 255)); colors32.Add(new UnityEngine.Color32(255, 255, 255, 255)); } else { colors.Add(new UnityEngine.Color(255, 0, 255, 255)); colors32.Add(new UnityEngine.Color32(255, 0, 255, 255)); } } segments0.m_mesh.colors = colors.ToArray(); segments0.m_mesh.colors32 = colors32.ToArray(); segmentNormals = segments0.m_lodMesh.normals; segmentVertices = segments0.m_lodMesh.vertices; colors = new List <UnityEngine.Color>(); colors32 = new List <UnityEngine.Color32>(); for (int i = 0; i < segments0.m_lodMesh.vertexCount; i++) { if (segmentNormals[i].y == 1 && Math.Abs(segmentVertices[i].x) <= 3 && segmentVertices[i].y < 3) { colors.Add(new UnityEngine.Color(255, 255, 255, 255)); colors32.Add(new UnityEngine.Color32(255, 255, 255, 255)); } else { colors.Add(new UnityEngine.Color(255, 0, 255, 255)); colors32.Add(new UnityEngine.Color32(255, 0, 255, 255)); } } segments0.m_lodMesh.colors = colors.ToArray(); segments0.m_lodMesh.colors32 = colors32.ToArray(); RoadHelper.HandleAsymSegmentFlags(segments3); segments0.m_material = defaultMaterial; segments0.m_lodMaterial = defaultLODMaterial; segments3.m_material = railMaterial; segments3.m_lodMaterial = railLODMaterial; segments4.m_material = defaultMaterial; segments4.m_lodMaterial = defaultLODMaterial; nodes0.m_material = defaultMaterial; nodes0.m_lodMaterial = defaultLODMaterial; nodes2.m_material = defaultMaterial; nodes2.m_lodMaterial = defaultLODMaterial; info.m_segments = new[] { segments0, segments1, segments2, segments3, segments4 }; break; } case NetInfoVersion.Slope: { var segments0 = info.m_segments[0].ShallowClone(); var segments1 = info.m_segments[0].ShallowClone(); var segments2 = info.m_segments[1].ShallowClone(); var segments3 = info.m_segments[0].ShallowClone(); var segments4 = info.m_segments[1].ShallowClone(); var nodes0 = info.m_nodes[0].ShallowClone(); //var nodes2 wires var nodes3 = info.m_nodes[3].ShallowClone(); var nodes9 = info.m_nodes[0].ShallowClone(); //var nodes10 = info.m_nodes[1].ShallowClone(); nodeList.Add(nodes0); nodeList.Add(nodes3); nodeList.Add(nodes9); segments0 .SetMeshes ($@"Meshes\6m\Tunnel_Pavement_Gray.obj", $@"Meshes\6m\Tunnel_Pavement_Gray_LOD.obj"); segments1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Boosted_Rail.obj", @"Meshes\10m\Blank.obj") .SetConsistentUVs(); segments2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Rail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segments3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Slope_Pavement.obj", @"Meshes\6m\Slope_Pavement_LOD.obj") .SetConsistentUVs(); segments4 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", $@"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); nodes0 .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Gray.obj", @"Meshes\6m\Tunnel_Pavement_Gray_LOD.obj"); nodes3 .SetMeshes (@"Meshes\6m\Slope_Node_Pavement.obj", @"Meshes\6m\Ground_Node_Pavement_LOD.obj"); nodes9 .SetMeshes (@"Meshes\6m\Slope_U_Node_Pavement.obj", @"Meshes\6m\Tunnel_Node_Pavement_LOD.obj") .SetConsistentUVs(); RoadHelper.HandleAsymSegmentFlags(segments4); segments1.m_material = defaultMaterial; segments1.m_lodMaterial = defaultLODMaterial; segments3.m_material = defaultMaterial; segments3.m_lodMaterial = defaultLODMaterial; segments4.m_material = railMaterial; segments4.m_lodMaterial = railLODMaterial; nodes9.m_material = defaultMaterial; nodes9.m_lodMaterial = defaultLODMaterial; info.m_segments = new[] { segments0, segments1, segments2, segments3, segments4 }; break; } case NetInfoVersion.Tunnel: { var segment0 = info.m_segments[0].ShallowClone(); var segment1 = info.m_segments[0].ShallowClone(); var segment2 = info.m_segments[0].ShallowClone(); var segment3 = info.m_segments[0].ShallowClone(); var segment4 = info.m_segments[0].ShallowClone(); var node0 = info.m_nodes[0].ShallowClone(); var node1 = info.m_nodes[0].ShallowClone(); nodeList.Add(node0); nodeList.Add(node1); segment0 .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Gray.obj", @"Meshes\6m\Tunnel_Pavement_Gray_LOD.obj"); segment1 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Tunnel_Pavement.obj") .SetConsistentUVs(); segment2 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Boosted_Rail.obj", @"Meshes\10m\Blank.obj"); segment3 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\ThirdRail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); segment4 .SetFlagsDefault() .SetMeshes (@"Meshes\6m\Rail.obj", @"Meshes\6m\Rail_LOD.obj") .SetConsistentUVs(); node0 .SetMeshes (@"Meshes\6m\Tunnel_Pavement_Gray.obj", @"Meshes\6m\Tunnel_Pavement_Gray_LOD.obj"); node1 .SetMeshes (@"Meshes\6m\Tunnel_Node_Pavement.obj", @"Meshes\6m\Tunnel_Node_Pavement_LOD.obj") .SetConsistentUVs(); segment1.m_material = defaultMaterial; segment1.m_lodMaterial = defaultLODMaterial; segment2.m_material = defaultMaterial; segment2.m_lodMaterial = defaultLODMaterial; segment3.m_material = defaultMaterial; segment3.m_lodMaterial = defaultLODMaterial; segment4.m_material = railMaterial; segment4.m_lodMaterial = railLODMaterial; RoadHelper.HandleAsymSegmentFlags(segment1); RoadHelper.HandleAsymSegmentFlags(segment3); node1.m_material = defaultMaterial; node1.m_lodMaterial = defaultLODMaterial; info.m_segments = new[] { segment0, segment1, segment2, segment3, segment4 }; } break; } for (int i = 0; i < nodeList.Count; i++) { nodeList[i].m_flagsForbidden |= NetNode.Flags.LevelCrossing; } nodeList.AddRange(SetupMeshUtil.GenerateSplitTracksAndLevelCrossings(info, version)); info.m_nodes = nodeList.ToArray(); }