public void UpdateFlags() { m_flags = m_flags.SetFlags(Flags.HC_Mod, NetworkExtensionManager.Instance.HTC); m_flags = m_flags.SetFlags(Flags.DCR_Mod, NetworkExtensionManager.Instance.DCR); m_flags = m_flags.SetFlags(Flags.HUT_Mod, NetworkExtensionManager.Instance.HUT); if (JRMan != null) { bool keepClearAll = true; foreach (var segmentID in NetUtil.IterateNodeSegments(NodeID)) { bool startNode = NetUtil.IsStartNode(segmentId: segmentID, nodeId: NodeID); bool keppClear = JRMan.IsEnteringBlockedJunctionAllowed(segmentID, startNode); keepClearAll &= keppClear; } m_flags = m_flags.SetFlags(Flags.KeepClearAll, keepClearAll); bool speedChange = TMPEHelpers.SpeedChanges(NodeID); bool twoSegments = NodeID.ToNode().CountSegments() == 2; m_flags = m_flags.SetFlags(Flags.SpeedChange, speedChange); m_flags = m_flags.SetFlags(Flags.TwoSegments, twoSegments); } }
public void UpdateAllFlags() { if (!NetUtil.IsSegmentValid(SegmentID)) { if (SegmentID.ToSegment().m_flags.IsFlagSet(NetSegment.Flags.Created)) { Log.Debug("Skip updating invalid segment:" + SegmentID); } return; } if (Log.VERBOSE) { Log.Debug($"NetSegmentExt.UpdateAllFlags() called. SegmentID={SegmentID}" /*Environment.StackTrace*/, false); } try { bool parkingLeft = false; bool parkingRight = false; float speed0 = -1; bool uniformSpeed = true; foreach (LaneData lane in NetUtil.IterateSegmentLanes(SegmentID)) { ref NetLaneExt laneExt = ref NetworkExtensionManager.Instance.LaneBuffer[lane.LaneID]; laneExt.UpdateLane(lane, SegmentID); if (laneExt.m_flags.IsFlagSet(NetLaneExt.Flags.ParkingAllowed)) { if (lane.LeftSide) { parkingLeft = true; } else { parkingRight = true; } } if (lane.LaneInfo.m_laneType.IsFlagSet(SpeedLimitManager.LANE_TYPES) && lane.LaneInfo.m_vehicleType.IsFlagSet(SpeedLimitManager.VEHICLE_TYPES)) { if (speed0 == -1) { speed0 = laneExt.SpeedLimit; } else { uniformSpeed &= laneExt.SpeedLimit == speed0; } } } m_flags = m_flags.SetFlags(Flags.ParkingAllowedLeft, parkingLeft); m_flags = m_flags.SetFlags(Flags.ParkingAllowedRight, parkingRight); m_flags = m_flags.SetFlags(Flags.UniformSpeedLimit, uniformSpeed); m_flags = m_flags.SetFlags(Flags.LeftHandTraffic, NetUtil.LHT); TMPEHelpers.GetMaxSpeedLimit(SegmentID, out ForwardSpeedLimit, out BackwardSpeedLimit); Curve = CalculateCurve(); Start.UpdateFlags(); Start.UpdateDirections(); End.UpdateFlags(); End.UpdateDirections(); if (Log.VERBOSE) { Log.Debug($"NetSegmentExt.UpdateAllFlags() succeeded for {this}" /*Environment.StackTrace*/, false); } } catch (Exception ex) {