public void RemovePillar() { for (uint num = 0u; num < PrefabCollection <NetInfo> .LoadedCount(); num++) { NetInfo loaded = PrefabCollection <NetInfo> .GetLoaded(num); if (loaded != null) { if (CSURUtil.IsCSUROffset(loaded)) { var roadAI = loaded.m_netAI as RoadAI; RoadBridgeAI elevatedAI = null; if ((loaded.m_netAI is RoadBridgeAI) && (Regex.Match(loaded.name, "Elevated", RegexOptions.IgnoreCase)).Success) { elevatedAI = loaded.m_netAI as RoadBridgeAI; } else { continue; } elevatedAI.m_bridgePillarInfo = null;// PrefabCollection<BuildingInfo>.FindLoaded("CSUR 2DC.Ama S-1_Data"); Debug.Log("Remove pilla for " + loaded.name.ToString()); } } } }
public static void UpdateSegmentStopFlags(this RoadBridgeAI roadbridge, ushort segmentID, ref NetSegment data) { Log.Debug($"updateflags on {segmentID}"); roadbridge.UpdateSegmentFlags(segmentID, ref data); NetSegment.Flags flags = data.m_flags & ~(NetSegment.Flags.StopRight | NetSegment.Flags.StopLeft | NetSegment.Flags.StopRight2 | NetSegment.Flags.StopLeft2); if (roadbridge.m_info.m_lanes == null) { return; } NetManager instance = Singleton <NetManager> .instance; bool inverted = (data.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None; uint lane = instance.m_segments.m_buffer[(int)segmentID].m_lanes; int i = 0; while (i < roadbridge.m_info.m_lanes.Length && lane != 0U) { NetLane.Flags laneFlags = (NetLane.Flags)instance.m_lanes.m_buffer[(int)((UIntPtr)lane)].m_flags; if ((laneFlags & NetLane.Flags.Stop) != NetLane.Flags.None) { if (roadbridge.m_info.m_lanes[i].m_position < 0f != inverted) { flags |= NetSegment.Flags.StopLeft; } else { flags |= NetSegment.Flags.StopRight; } } else if ((laneFlags & NetLane.Flags.Stop2) != NetLane.Flags.None) { if (roadbridge.m_info.m_lanes[i].m_position < 0f != inverted) { flags |= NetSegment.Flags.StopLeft2; } else { flags |= NetSegment.Flags.StopRight2; } } lane = instance.m_lanes.m_buffer[(int)((UIntPtr)lane)].m_nextLane; i++; } data.m_flags = flags; Log.Debug($"flags {flags}"); }
public static void UpdateSegmentStopFlags(this RoadBridgeAI roadbridge, ushort segmentID, ref NetSegment data) { roadbridge.UpdateSegmentFlags(segmentID, ref data); var oldflags = data.m_flags; NetSegment.Flags flags = data.m_flags & ~(NetSegment.Flags.StopRight | NetSegment.Flags.StopLeft | NetSegment.Flags.StopRight2 | NetSegment.Flags.StopLeft2); if (roadbridge.m_info.m_lanes != null) { NetManager instance = Singleton <NetManager> .instance; bool flag = (data.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None; uint num = instance.m_segments.m_buffer[(int)segmentID].m_lanes; int num2 = 0; while (num2 < roadbridge.m_info.m_lanes.Length && num != 0U) { NetLane.Flags flags2 = (NetLane.Flags)instance.m_lanes.m_buffer[(int)((UIntPtr)num)].m_flags; if ((flags2 & NetLane.Flags.Stop) != NetLane.Flags.None) { if (roadbridge.m_info.m_lanes[num2].m_position < 0f != flag) { flags |= NetSegment.Flags.StopLeft; } else { flags |= NetSegment.Flags.StopRight; } } if ((flags2 & NetLane.Flags.Stop2) != NetLane.Flags.None) { if (roadbridge.m_info.m_lanes[num2].m_position < 0f != flag) { flags |= NetSegment.Flags.StopLeft2; } else { flags |= NetSegment.Flags.StopRight2; } } num = instance.m_lanes.m_buffer[(int)((UIntPtr)num)].m_nextLane; num2++; } } Log.Debug($"oldflags {oldflags} newflags {flags} on segment {segmentID} bridge"); data.m_flags = flags; }
public void InstallPillar() { for (uint num = 0u; num < PrefabCollection <NetInfo> .LoadedCount(); num++) { NetInfo loaded = PrefabCollection <NetInfo> .GetLoaded(num); if (CSURUtil.IsCSUR(loaded)) { RoadBridgeAI elevatedAI = null; if ((loaded.m_netAI is RoadBridgeAI) && (Regex.Match(loaded.name, "Elevated", RegexOptions.IgnoreCase)).Success && (loaded.m_segments.Length != 0)) { elevatedAI = loaded.m_netAI as RoadBridgeAI; } else { continue; } //Caculate lane num int laneNum = (int)CSURUtil.CountCSURSVehicleLanes(loaded); if (!CSURUtil.IsCSURDual(loaded)) { if (Regex.Match(loaded.name, "CSUR-T", RegexOptions.IgnoreCase).Success) { laneNum = laneNum - 1; } if (laneNum < 0) { laneNum = 0; } switch (laneNum) { case 0: case 1: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString()); DebugLog.LogToFileOnly("Try to Load pillar Ama S-1_Data"); elevatedAI.m_bridgePillarOffset = 0.5f; if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-1_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-1_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama S-1_Data"); } break; case 2: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 2"); DebugLog.LogToFileOnly("Try to Load pillar Ama S-2_Data"); elevatedAI.m_bridgePillarOffset = 1f; if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama S-2_Data"); } break; case 3: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 3"); DebugLog.LogToFileOnly("Try to Load pillar Ama S-3_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-3_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-3_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama S-3_Data"); } break; case 4: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 4"); DebugLog.LogToFileOnly("Try to Load pillar Ama G-3_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-3_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-3_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama G-3_Data"); } break; case 5: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 5"); DebugLog.LogToFileOnly("Try to Load pillar Ama G-4_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-4_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-4_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama G-4_Data"); } break; default: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString()); DebugLog.LogToFileOnly("Try to Load pillar Ama G-5_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-5_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-5_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama G-5_Data"); } break; } } else { /*if (Regex.Match(loaded.name, "CSUR-S", RegexOptions.IgnoreCase).Success) * laneNum = laneNum - 1; * else if (Regex.Match(loaded.name, "CSUR-T", RegexOptions.IgnoreCase).Success) * laneNum = laneNum - 1; * else if (Regex.Match(loaded.name, "CSUR-R", RegexOptions.IgnoreCase).Success) * laneNum = laneNum - 1;*/ if (laneNum < 0) { laneNum = 0; } //laneNum = laneNum * 2; switch (laneNum) { case 0: case 2: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString()); DebugLog.LogToFileOnly("Try to Load pillar Ama S-2_Data"); elevatedAI.m_bridgePillarOffset = 1f; if (PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama S-2_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama S-2_Data"); } break; case 4: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 4"); DebugLog.LogToFileOnly("Try to Load pillar Ama M-2_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama M-2_Data"); } break; case 6: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 6"); DebugLog.LogToFileOnly("Try to Load pillar Ama M-2_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama M-2_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama M-2_Data"); } break; case 8: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 8"); DebugLog.LogToFileOnly("Try to Load pillar Ama M-4_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama M-4_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama M-4_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama M-4_Data"); } break; case 10: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = 10"); DebugLog.LogToFileOnly("Try to Load pillar Ama G-8DR_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama G-8DR_Data"); } break; default: DebugLog.LogToFileOnly(loaded.name.ToString() + "lane num = " + laneNum.ToString()); DebugLog.LogToFileOnly("Try to Load pillar Ama G-8DR_Data"); if (PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data") != null) { elevatedAI.m_bridgePillarInfo = PrefabCollection <BuildingInfo> .FindLoaded("Ama G-8DR_Data"); } else { DebugLog.LogToFileOnly("Failed Load pillar Ama G-8DR_Data"); } break; } } } } }