public static float ChangeHalfWidth(float halfWidth0, ushort segment) { var data = Singleton <NetManager> .instance.m_segments.m_buffer[segment]; if (OptionUI.alignZone) { if (CSURUtil.IsCSUR(data.Info)) { if (data.Info.m_halfWidth < 9f) { return(8f); } else if (data.Info.m_halfWidth < 17f) { return(16f); } else if (data.Info.m_halfWidth < 25f) { return(24f); } else if (data.Info.m_halfWidth < 33f) { return(32f); } else if (data.Info.m_halfWidth < 41f) { return(40f); } } } return(halfWidth0); }
public static void Prefix(ref NetSegment data) { if (OptionUI.alignZone) { if (CSURUtil.IsCSUR(data.Info)) { if (!segmentHalfWidthLock[data.m_infoIndex]) { segmentHalfWidth[data.m_infoIndex] = data.Info.m_halfWidth; if (data.Info.m_halfWidth < 9f) { data.Info.m_halfWidth = 8f; } else if (data.Info.m_halfWidth < 17f) { data.Info.m_halfWidth = 16f; } else if (data.Info.m_halfWidth < 25f) { data.Info.m_halfWidth = 24f; } else if (data.Info.m_halfWidth < 33f) { data.Info.m_halfWidth = 32f; } else if (data.Info.m_halfWidth < 41f) { data.Info.m_halfWidth = 40f; } segmentHalfWidthLock[data.m_infoIndex] = true; } } } }
public static void Prefix(ref NetSegment __instance, ushort segmentID, bool start) { NetInfo info = __instance.Info; NetManager instance = Singleton <NetManager> .instance; ushort num = (!start) ? __instance.m_endNode : __instance.m_startNode; ushort num2 = (!start) ? __instance.m_startNode : __instance.m_endNode; Vector3 position = instance.m_nodes.m_buffer[(int)num].m_position; Vector3 position2 = instance.m_nodes.m_buffer[(int)num2].m_position; Vector3 startDir = (!start) ? __instance.m_endDirection : __instance.m_startDirection; Vector3 endDir = (!start) ? __instance.m_startDirection : __instance.m_endDirection; // NON-STOCK CODE STARTS float m_minCornerOffset = 0f; float tempMinCornerOffset = 1000f; int segmentCount = 0; bool isCSURRoad = false; for (int i = 0; i < 8; i++) { ushort segment1 = instance.m_nodes.m_buffer[num].GetSegment(i); if (segment1 != 0) { segmentCount++; if (CSURUtil.IsCSUR(Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info)) { isCSURRoad = true; } if (Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset < tempMinCornerOffset) { tempMinCornerOffset = Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset; } } } if (isCSURRoad) { if (tempMinCornerOffset != 1000f) { m_minCornerOffset = tempMinCornerOffset; } //direct node if (segmentCount == 2) { m_minCornerOffset = m_minCornerOffset / 2f; if (m_minCornerOffset > 24f) { m_minCornerOffset = 24f; } } //DebugLog.LogToFileOnly("Pre m_minCornerOffset = " + m_minCornerOffset.ToString()); if (!segmentOffsetLock[__instance.m_infoIndex]) { segmentOffset[__instance.m_infoIndex] = __instance.Info.m_minCornerOffset; segmentOffsetLock[__instance.m_infoIndex] = true; __instance.Info.m_minCornerOffset = m_minCornerOffset; } } //DebugLog.LogToFileOnly("Pre m_minCornerOffset = " + __instance.Info.m_minCornerOffset.ToString()); }
public void ChangeDefaultSpeedAndConstructionFee() { if (OptionUI.tempPatchForSpeedAndPrice) { for (uint num = 0u; num < PrefabCollection <NetInfo> .LoadedCount(); num++) { NetInfo asset = PrefabCollection <NetInfo> .GetLoaded(num); if (asset != null) { if (asset.m_netAI is RoadAI) { if (CSURUtil.IsCSUR(asset)) { int laneNum = (int)CSURUtil.CountCSURSVehicleLanes(asset); if (CSURUtil.IsCSURDual(asset)) { if (laneNum <= 6) { for (int j = 0; j < asset.m_lanes.Length; j++) { asset.m_lanes[j].m_speedLimit = 0.6f + (laneNum >> 1) / 5f; } } } else { if (laneNum <= 3) { for (int j = 0; j < asset.m_lanes.Length; j++) { asset.m_lanes[j].m_speedLimit = 0.6f + laneNum / 5f; } } } laneNum += (int)CSURUtil.CountCSURSOtherLanes(asset, true); float width = 0; if (asset.m_lanes.Length > 0) { width = asset.m_lanes[asset.m_sortedLanes[0]].m_position - asset.m_lanes[asset.m_sortedLanes[asset.m_lanes.Length - 1]].m_position; } if (width < 0) { width = -width; } PlayerNetAI AI = asset.m_netAI as PlayerNetAI; AI.m_constructionCost = 400 * laneNum + (int)(width * 100); } } } } } }
public void RefreshNode() { for (ushort i = 0; i < Singleton <NetManager> .instance.m_nodes.m_size; i++) { NetInfo asset = Singleton <NetManager> .instance.m_nodes.m_buffer[i].Info; if (CSURUtil.IsCSUR(asset)) { Singleton <NetManager> .instance.UpdateNode(i); } } }
public static void Prefix(ref NetSegment __instance, bool start) { if (OptionUI.fixLargeJunction) { NetManager instance = Singleton <NetManager> .instance; ushort num = (!start) ? __instance.m_endNode : __instance.m_startNode; // NON-STOCK CODE STARTS float m_minCornerOffset = 0f; float tempMinCornerOffset = 1000f; int segmentCount = 0; bool isCSURRoad = false; for (int i = 0; i < 8; i++) { ushort segment1 = instance.m_nodes.m_buffer[num].GetSegment(i); if (segment1 != 0) { segmentCount++; if (CSURUtil.IsCSUR(Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info)) { isCSURRoad = true; } if (Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset < tempMinCornerOffset) { tempMinCornerOffset = Singleton <NetManager> .instance.m_segments.m_buffer[segment1].Info.m_minCornerOffset; } } } if (isCSURRoad) { if (tempMinCornerOffset != 1000f) { m_minCornerOffset = tempMinCornerOffset; } //direct node if (segmentCount == 2) { m_minCornerOffset = m_minCornerOffset / 2f; if (m_minCornerOffset > 24f) { m_minCornerOffset = 24f; } } if (!segmentOffsetLock[__instance.m_infoIndex]) { segmentOffset[__instance.m_infoIndex] = __instance.Info.m_minCornerOffset; segmentOffsetLock[__instance.m_infoIndex] = true; __instance.Info.m_minCornerOffset = m_minCornerOffset; } } } }
public static void Postfix(ref NetSegment data) { if (OptionUI.alignZone) { if (CSURUtil.IsCSUR(data.Info)) { if (segmentHalfWidthLock[data.m_infoIndex]) { data.Info.m_halfWidth = segmentHalfWidth[data.m_infoIndex]; segmentHalfWidthLock[data.m_infoIndex] = false; } } } }
public static bool Prefix(ref NetSegment __instance, ushort segmentID) { if (OptionUI.noJunction) { NetInfo asset = __instance.Info; if (asset != null) { if (asset.m_netAI is RoadAI) { if (CSURUtil.IsCSUR(asset)) { CSURUpdateEndSegments(ref __instance, segmentID); return(false); } } } } return(true); }
public void RefreshSegment() { for (ushort i = 0; i < Singleton <NetManager> .instance.m_segments.m_size; i++) { NetInfo asset = Singleton <NetManager> .instance.m_segments.m_buffer[i].Info; if (asset != null) { if (CSURUtil.IsCSUR(asset)) { if (asset.m_netAI is RoadAI) { Singleton <NetManager> .instance.UpdateSegment(i); } else { Singleton <NetManager> .instance.m_segments.m_buffer[i].UpdateLanes(i, true); } } } } }
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; } } } } }
public void OnGUI() { if (!(Loader.is1637663252 | Loader.is583429740 | Loader.is1806963141)) { return; } if ((laterLeftClick == 8) && needLaterLeftClick) { laterLeftClick = 0; MouseSimulater.LeftClick(); needLaterLeftClick = false; } else if (needLaterLeftClick) { laterLeftClick++; } var e = Event.current; // Checking key presses if (OptionsKeymappingFunction.m_stayinlane.IsPressed(e)) { Assembly TMPE = Assembly.Load("TrafficManager"); var selectedNodeId = TMPE.GetType("TrafficManager.UI.TrafficManagerTool").GetProperty("SelectedNodeId"); var TrafficManagerTool = TMPE.CreateInstance("TrafficManager.UI.TrafficManagerTool"); ushort node = (ushort)selectedNodeId.GetValue(TrafficManagerTool, null); DebugLog.LogToFileOnly("TMPE select node = " + node.ToString()); NetInfo asset = Singleton <NetManager> .instance.m_nodes.m_buffer[node].Info; if (CSURUtil.IsCSUR(asset)) { bool IsCSURRLane = false; bool IsCSURDual = false; bool IsCSURSingle = false; for (int j = 0; j < 8; j++) { ushort segmentID = Singleton <NetManager> .instance.m_nodes.m_buffer[node].GetSegment(j); if (segmentID != 0) { var segment = Singleton <NetManager> .instance.m_segments.m_buffer[segmentID]; if (CSURUtil.IsCSUR(segment.Info)) { if (CSURUtil.IsCSURDual(segment.Info)) { IsCSURDual = true; } else { if (CSURUtil.IsCSURRLaneOffset(segment.Info)) { IsCSURRLane = true; break; } IsCSURSingle = true; } } } } if (IsCSURRLane || (IsCSURDual && IsCSURSingle)) { AddLaneConnectionForCSUR(node, TMPE); //refresh MouseSimulater.RightClick(); needLaterLeftClick = true; } } } if (OptionsKeymappingFunction.m_stayinlaneAll.IsPressed(e)) { Assembly TMPE = Assembly.Load("TrafficManager"); for (ushort i = 0; i < Singleton <NetManager> .instance.m_nodes.m_size; i++) { bool IsCSURRLane = false; bool IsCSURDual = false; bool IsCSURSingle = false; for (int j = 0; j < 8; j++) { ushort segmentID = Singleton <NetManager> .instance.m_nodes.m_buffer[i].GetSegment(j); if (segmentID != 0) { var segment = Singleton <NetManager> .instance.m_segments.m_buffer[segmentID]; if (CSURUtil.IsCSUR(segment.Info)) { if (CSURUtil.IsCSURDual(segment.Info)) { IsCSURDual = true; } else { if (CSURUtil.IsCSURRLaneOffset(segment.Info)) { IsCSURRLane = true; break; } IsCSURSingle = true; } } } } if (IsCSURRLane || (IsCSURDual && IsCSURSingle)) { AddLaneConnectionForCSUR(i, TMPE); } } } }