private void SetSegmentEndFlags(ushort segmentId, bool startNode, SegmentEndFlags flags) { if (flags.uturnAllowed != TernaryBool.Undefined) { SetUturnAllowed(segmentId, startNode, flags.IsUturnAllowed()); } if (flags.nearTurnOnRedAllowed != TernaryBool.Undefined) { SetNearTurnOnRedAllowed(segmentId, startNode, flags.IsNearTurnOnRedAllowed()); } if (flags.nearTurnOnRedAllowed != TernaryBool.Undefined) { SetFarTurnOnRedAllowed(segmentId, startNode, flags.IsFarTurnOnRedAllowed()); } if (flags.straightLaneChangingAllowed != TernaryBool.Undefined) { SetLaneChangingAllowedWhenGoingStraight(segmentId, startNode, flags.IsLaneChangingAllowedWhenGoingStraight()); } if (flags.enterWhenBlockedAllowed != TernaryBool.Undefined) { //Log.Warning($"JunctionRestrictionsManager.SetSegmentEndFlags({segmentId}, {startNode}, {flags}): flags.enterWhenBlockedAllowed is defined"); SetEnteringBlockedJunctionAllowed(segmentId, startNode, flags.IsEnteringBlockedJunctionAllowed()); } if (flags.pedestrianCrossingAllowed != TernaryBool.Undefined) { SetPedestrianCrossingAllowed(segmentId, startNode, flags.IsPedestrianCrossingAllowed()); } }
public void AddInvalidSegmentEndFlags(ushort segmentId, bool startNode, ref SegmentEndFlags endFlags) { if (startNode) { invalidSegmentFlags[segmentId].startNodeFlags = endFlags; } else { invalidSegmentFlags[segmentId].endNodeFlags = endFlags; } }
protected override void HandleInvalidSegment(SegmentGeometry geometry) { foreach (bool startNode in Constants.ALL_BOOL) { SegmentEndFlags flags = startNode ? SegmentFlags[geometry.SegmentId].startNodeFlags : SegmentFlags[geometry.SegmentId].endNodeFlags; if (!flags.IsDefault()) { nodeWatcher.AddInvalidSegmentEndFlags(geometry.SegmentId, startNode, ref flags); } SegmentFlags[geometry.SegmentId].Reset(startNode); } }
private void SetSegmentEndFlags(ushort segmentId, bool startNode, SegmentEndFlags flags) { if (flags.uturnAllowed != TernaryBool.Undefined) { SetUturnAllowed(segmentId, startNode, flags.IsUturnAllowed()); } if (flags.straightLaneChangingAllowed != TernaryBool.Undefined) { SetLaneChangingAllowedWhenGoingStraight(segmentId, startNode, flags.IsLaneChangingAllowedWhenGoingStraight()); } if (flags.enterWhenBlockedAllowed != TernaryBool.Undefined) { SetEnteringBlockedJunctionAllowed(segmentId, startNode, flags.IsEnteringBlockedJunctionAllowed()); } if (flags.pedestrianCrossingAllowed != TernaryBool.Undefined) { SetPedestrianCrossingAllowed(segmentId, startNode, flags.IsPedestrianCrossingAllowed()); } }
public List <Configuration.SegmentNodeConf> SaveData(ref bool success) { List <Configuration.SegmentNodeConf> ret = new List <Configuration.SegmentNodeConf>(); NetManager netManager = Singleton <NetManager> .instance; for (uint segmentId = 0; segmentId < NetManager.MAX_SEGMENT_COUNT; segmentId++) { try { if (!Services.NetService.IsSegmentValid((ushort)segmentId)) { continue; } Configuration.SegmentNodeFlags startNodeFlags = null; Configuration.SegmentNodeFlags endNodeFlags = null; ushort startNodeId = netManager.m_segments.m_buffer[segmentId].m_startNode; if (Services.NetService.IsNodeValid(startNodeId)) { SegmentEndFlags endFlags = SegmentFlags[segmentId].startNodeFlags; if (!endFlags.IsDefault()) { startNodeFlags = new Configuration.SegmentNodeFlags(); startNodeFlags.uturnAllowed = TernaryBoolUtil.ToOptBool(GetUturnAllowed((ushort)segmentId, true)); startNodeFlags.straightLaneChangingAllowed = TernaryBoolUtil.ToOptBool(GetLaneChangingAllowedWhenGoingStraight((ushort)segmentId, true)); startNodeFlags.enterWhenBlockedAllowed = TernaryBoolUtil.ToOptBool(GetEnteringBlockedJunctionAllowed((ushort)segmentId, true)); startNodeFlags.pedestrianCrossingAllowed = TernaryBoolUtil.ToOptBool(GetPedestrianCrossingAllowed((ushort)segmentId, true)); } } ushort endNodeId = netManager.m_segments.m_buffer[segmentId].m_endNode; if (Services.NetService.IsNodeValid(endNodeId)) { SegmentEndFlags endFlags = SegmentFlags[segmentId].endNodeFlags; if (!endFlags.IsDefault()) { endNodeFlags = new Configuration.SegmentNodeFlags(); endNodeFlags.uturnAllowed = TernaryBoolUtil.ToOptBool(GetUturnAllowed((ushort)segmentId, false)); endNodeFlags.straightLaneChangingAllowed = TernaryBoolUtil.ToOptBool(GetLaneChangingAllowedWhenGoingStraight((ushort)segmentId, false)); endNodeFlags.enterWhenBlockedAllowed = TernaryBoolUtil.ToOptBool(GetEnteringBlockedJunctionAllowed((ushort)segmentId, false)); endNodeFlags.pedestrianCrossingAllowed = TernaryBoolUtil.ToOptBool(GetPedestrianCrossingAllowed((ushort)segmentId, false)); } } if (startNodeFlags == null && endNodeFlags == null) { continue; } Configuration.SegmentNodeConf conf = new Configuration.SegmentNodeConf((ushort)segmentId); conf.startNodeFlags = startNodeFlags; conf.endNodeFlags = endNodeFlags; Log._Debug($"Saving segment-at-node flags for seg. {segmentId}"); ret.Add(conf); } catch (Exception e) { Log.Error($"Exception occurred while saving segment node flags @ {segmentId}: {e.ToString()}"); success = false; } } return(ret); }