private void OnToolLeftClick_Select() { if (HoveredNodeId == 0 || HoveredSegmentId == 0) { return; } // Clicked on something which was hovered NetNode.Flags netFlags = Singleton <NetManager> .instance.m_nodes.m_buffer[HoveredNodeId].m_flags; // Not interested in clicking anything other than a junction if ((netFlags & NetNode.Flags.Junction) == NetNode.Flags.None) { return; } // Not interested in segments which don't start at the hovered node NetSegment[] segmentsBuffer = Singleton <NetManager> .instance.m_segments.m_buffer; if (segmentsBuffer[HoveredSegmentId].m_startNode != HoveredNodeId && segmentsBuffer[HoveredSegmentId].m_endNode != HoveredNodeId) { return; } if (Time.frameCount - framesSeparateTurningLanesModeActivated > 80) { // the mode resets after 2 seconds. alternativeMode_ = DEFAULT_ALT_MODE; } if (SeparateSegmentLanesModifierIsPressed) { SeparateTurningLanesUtil.SeparateSegmentLanes( HoveredSegmentId, HoveredNodeId, out var res, alternativeMode: alternativeMode_); InformUserAboutPossibleFailure(res); } else if (SeparateNodeLanesModifierIsPressed) { SeparateTurningLanesUtil.SeparateNode(HoveredNodeId, out var res, alternativeMode: alternativeMode_); InformUserAboutPossibleFailure(res); } else if (HasHoverLaneArrows()) { SelectedSegmentId = HoveredSegmentId; SelectedNodeId = HoveredNodeId; alternativeMode_ = DEFAULT_ALT_MODE; fsm_.SendTrigger(Trigger.SegmentClick); } if (SeparateSegmentLanesModifierIsPressed || SeparateNodeLanesModifierIsPressed) { framesSeparateTurningLanesModeActivated = Time.frameCount; alternativeMode_ = !alternativeMode_; } }
/// <summary> /// Apply default Lane arrows according to policy. /// </summary> private static void BuiltIn(ushort segmentId) { SeparateTurningLanesUtil.SeparateSegmentLanesBuiltIn( segmentId: segmentId, nodeId: segmentId.ToSegment().m_startNode); SeparateTurningLanesUtil.SeparateSegmentLanesBuiltIn( segmentId: segmentId, nodeId: segmentId.ToSegment().m_endNode); }