Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed weird foreach over { false, true } hack. #1154

Merged
merged 2 commits into from
Sep 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions TLM/TLM/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,6 @@ public static class Constants {
/// </summary>
public const float BYTE_TO_FLOAT_SCALE = 1f / 255f;

/// <summary>
/// Array of boolean to allow creating foreach loops
/// </summary>
public static readonly bool[] ALL_BOOL = { false, true };

/// <summary>
/// Conversion rate from km/h to game speed (also exists in TrafficManager.API.Constants)
/// </summary>
Expand Down
19 changes: 11 additions & 8 deletions TLM/TLM/Manager/Impl/JunctionRestrictionsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -160,17 +160,20 @@ public void RemoveJunctionRestrictionsIfNecessary(ushort nodeId) {
}

protected override void HandleInvalidSegment(ref ExtSegment seg) {
foreach (bool startNode in Constants.ALL_BOOL) {
SegmentEndFlags flags = startNode
? segmentFlags_[seg.segmentId].startNodeFlags
: segmentFlags_[seg.segmentId].endNodeFlags;
HandleInvalidSegment(ref seg, false);
HandleInvalidSegment(ref seg, true);
}

if (!flags.IsDefault()) {
AddInvalidSegmentEndFlags(seg.segmentId, startNode, ref flags);
}
private void HandleInvalidSegment(ref ExtSegment seg, bool startNode) {
SegmentEndFlags flags = startNode
? segmentFlags_[seg.segmentId].startNodeFlags
: segmentFlags_[seg.segmentId].endNodeFlags;

segmentFlags_[seg.segmentId].Reset(startNode, true);
if (!flags.IsDefault()) {
AddInvalidSegmentEndFlags(seg.segmentId, startNode, ref flags);
}

segmentFlags_[seg.segmentId].Reset(startNode, true);
}

protected override void HandleValidSegment(ref ExtSegment seg) {
Expand Down
22 changes: 13 additions & 9 deletions TLM/TLM/Util/PriorityRoad.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,19 +155,23 @@ public static IRecordable FixRoad(List<ushort> segmentList) {
}

foreach (ushort segmentId in segmentList) {
foreach (bool startNode in Constants.ALL_BOOL) {
ushort nodeId = netService.GetSegmentNodeId(segmentId, startNode);
bool isEndNode = nodeId == firstNodeId || nodeId == lastNodeId;
if (isEndNode) {
FixHighPriorityJunction(nodeId);
} else {
FixHighPriorityJunction(nodeId, segmentList);
}
}
FixHighPriorityJunction(segmentId, firstNodeId, lastNodeId, segmentList, false);
FixHighPriorityJunction(segmentId, firstNodeId, lastNodeId, segmentList, true);
}

return record;
}

private static void FixHighPriorityJunction(ushort segmentId, ushort firstNodeId, ushort lastNodeId, List<ushort> segmentList, bool startNode) {
ushort nodeId = netService.GetSegmentNodeId(segmentId, startNode);
bool isEndNode = nodeId == firstNodeId || nodeId == lastNodeId;
if (isEndNode) {
FixHighPriorityJunction(nodeId);
} else {
FixHighPriorityJunction(nodeId, segmentList);
}
}

private static bool IsStraighOneWay(ushort segmentId0, ushort segmentId1) {
ref NetSegment seg0 = ref GetSeg(segmentId0);
//ref NetSegment seg1 = ref GetSeg(segmentId1);
Expand Down
39 changes: 21 additions & 18 deletions TLM/TLM/Util/RoundaboutMassEdit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,31 +106,34 @@ ref GetNode(nodeId),
}

internal static void FixRulesRoundabout(ushort segmentId) {
foreach (bool startNode in Constants.ALL_BOOL) {
if (OptionsMassEditTab.RoundAboutQuickFix_PrioritySigns) {
TrafficPriorityManager.Instance.SetPrioritySign(
segmentId,
startNode,
PriorityType.Main);
}
FixRulesRoundabout(segmentId, false);
FixRulesRoundabout(segmentId, true);
}

ushort nodeId = netService.GetSegmentNodeId(
private static void FixRulesRoundabout(ushort segmentId, bool startNode) {
if (OptionsMassEditTab.RoundAboutQuickFix_PrioritySigns) {
TrafficPriorityManager.Instance.SetPrioritySign(
segmentId,
startNode);
startNode,
PriorityType.Main);
}

ExtSegmentEnd curEnd = GetSegEnd(segmentId, startNode);
ushort nodeId = netService.GetSegmentNodeId(
segmentId,
startNode);

if (OptionsMassEditTab.RoundAboutQuickFix_NoCrossMainR) {
JunctionRestrictionsManager.Instance.SetPedestrianCrossingAllowed(
segmentId,
startNode,
false);
}
JunctionRestrictionsManager.Instance.SetEnteringBlockedJunctionAllowed(
ExtSegmentEnd curEnd = GetSegEnd(segmentId, startNode);

if (OptionsMassEditTab.RoundAboutQuickFix_NoCrossMainR) {
JunctionRestrictionsManager.Instance.SetPedestrianCrossingAllowed(
segmentId,
startNode,
true);
false);
}
JunctionRestrictionsManager.Instance.SetEnteringBlockedJunctionAllowed(
segmentId,
startNode,
true);
}

internal static void FixRulesMinor(ushort segmentId, ushort nodeId) {
Expand Down