private void ApplyFlags() { for (uint laneId = 0; laneId < NetManager.MAX_LANE_COUNT; ++laneId) { Flags.ApplyLaneArrowFlags(laneId); } }
public static void Prefix(RoadBaseAI __instance, ushort segmentID, ref NetSegment data) { // TODO check if this is required *START* uint curLaneId = data.m_lanes; int numLanes = data.Info.m_lanes.Length; uint laneIndex = 0; while (laneIndex < numLanes && curLaneId != 0u) { Flags.ApplyLaneArrowFlags(curLaneId); laneIndex++; curLaneId = Singleton <NetManager> .instance.m_lanes.m_buffer[curLaneId].m_nextLane; } // ↑↑↑↑ // TODO check if this is required *END* #if BENCHMARK using (Benchmark.MaybeCreateBenchmark(null, "Traffic-measurement")) { #endif if (segmentID < lastSimulatedSegmentId) { // segment simulation restart ++trafficMeasurementMod; if (trafficMeasurementMod >= 4) { trafficMeasurementMod = 0; } } lastSimulatedSegmentId = segmentID; bool doTrafficMeasurement = true; if (Options.simulationAccuracy == SimulationAccuracy.High || Options.simulationAccuracy == SimulationAccuracy.Medium) { doTrafficMeasurement = (segmentID & 1) == trafficMeasurementMod; } else if (Options.simulationAccuracy <= SimulationAccuracy.Low) { doTrafficMeasurement = (segmentID & 3) == trafficMeasurementMod; } if (doTrafficMeasurement) { Constants.ManagerFactory.TrafficMeasurementManager.OnBeforeSimulationStep( segmentID, ref data); } #if BENCHMARK } #endif }
/// <summary> /// Apply user lane arrows. /// </summary> private static void Forced(ushort segmentId) { uint laneId = segmentId.ToSegment().m_lanes; while (laneId != 0) { if (!Flags.ApplyLaneArrowFlags(laneId)) { Flags.RemoveLaneArrowFlags(laneId); } laneId = laneId.ToLane().m_nextLane; } }
public static void Postfix(ushort segmentID, ref NetSegment data, bool loading) { NetManager netManager = Singleton <NetManager> .instance; uint laneId = netManager.m_segments.m_buffer[segmentID].m_lanes; while (laneId != 0) { if (!Flags.ApplyLaneArrowFlags(laneId)) { Flags.RemoveLaneArrowFlags(laneId); } laneId = netManager.m_lanes.m_buffer[laneId].m_nextLane; } }
public static void Prefix(RoadBaseAI __instance, ushort segmentID, ref NetSegment data) { // TODO check if this is required *START* uint curLaneId = data.m_lanes; int numLanes = data.Info.m_lanes.Length; uint laneIndex = 0; while (laneIndex < numLanes && curLaneId != 0u) { Flags.ApplyLaneArrowFlags(curLaneId); laneIndex++; curLaneId = Singleton <NetManager> .instance.m_lanes.m_buffer[curLaneId].m_nextLane; } // ↑↑↑↑ // TODO check if this is required *END* Constants.ManagerFactory.TrafficMeasurementManager.OnBeforeSimulationStep( segmentID, ref data); }
private void GuiLaneChangeWindow(int num) { NetSegment[] segmentsBuffer = Singleton <NetManager> .instance.m_segments.m_buffer; IList <LanePos> laneList = Constants.ServiceFactory.NetService.GetSortedLanes( SelectedSegmentId, ref segmentsBuffer[SelectedSegmentId], segmentsBuffer[SelectedSegmentId].m_startNode == SelectedNodeId, LaneArrowManager.LANE_TYPES, LaneArrowManager.VEHICLE_TYPES, true); bool?startNode = Constants.ServiceFactory.NetService.IsStartNode(SelectedSegmentId, SelectedNodeId); if (startNode == null) { Log.Error( $"LaneArrowTool._guiLaneChangeWindow: Segment {SelectedSegmentId} " + $"is not connected to node {SelectedNodeId}"); return; } GUILayout.BeginHorizontal(); for (var i = 0; i < laneList.Count; i++) { var flags = (NetLane.Flags)Singleton <NetManager> .instance.m_lanes.m_buffer[laneList[i].laneId].m_flags; var style1 = new GUIStyle("button"); var style2 = new GUIStyle("button") { normal = { textColor = new Color32(255, 0, 0, 255) }, hover = { textColor = new Color32(255, 0, 0, 255) }, focused = { textColor = new Color32(255, 0, 0, 255) } }; var laneStyle = new GUIStyle { contentOffset = new Vector2(12f, 0f) }; var laneTitleStyle = new GUIStyle { contentOffset = new Vector2(36f, 2f), normal = { textColor = new Color(1f, 1f, 1f) } }; GUILayout.BeginVertical(laneStyle); GUILayout.Label(Translation.GetString("Lane") + " " + (i + 1), laneTitleStyle); GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); if (!Flags.ApplyLaneArrowFlags(laneList[i].laneId)) { Flags.RemoveLaneArrowFlags(laneList[i].laneId); } SetLaneArrowError res = SetLaneArrowError.Invalid; bool buttonClicked = false; if (GUILayout.Button( "←", ((flags & NetLane.Flags.Left) == NetLane.Flags.Left ? style1 : style2), GUILayout.Width(35), GUILayout.Height(25))) { buttonClicked = true; LaneArrowManager.Instance.ToggleLaneArrows( laneList[i].laneId, (bool)startNode, LaneArrows.Left, out res); } if (GUILayout.Button( "↑", ((flags & NetLane.Flags.Forward) == NetLane.Flags.Forward ? style1 : style2), GUILayout.Width(25), GUILayout.Height(35))) { buttonClicked = true; LaneArrowManager.Instance.ToggleLaneArrows( laneList[i].laneId, (bool)startNode, LaneArrows.Forward, out res); } if (GUILayout.Button( "→", ((flags & NetLane.Flags.Right) == NetLane.Flags.Right ? style1 : style2), GUILayout.Width(35), GUILayout.Height(25))) { buttonClicked = true; LaneArrowManager.Instance.ToggleLaneArrows( laneList[i].laneId, (bool)startNode, LaneArrows.Right, out res); } if (buttonClicked) { switch (res) { case SetLaneArrowError.HighwayArrows: { MainTool.ShowTooltip( Translation.GetString("Lane_Arrow_Changer_Disabled_Highway")); break; } case SetLaneArrowError.LaneConnection: { MainTool.ShowTooltip( Translation.GetString("Lane_Arrow_Changer_Disabled_Connection")); break; } } } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndVertical(); } GUILayout.EndHorizontal(); }