public override void Cleanup() { segmentCenterByDir.Clear(); CachedVisibleSegmentIds.Clear(); lastCamPos = null; lastCamRot = null; }
public override void Cleanup() { segmentCenterByDir.Clear(); CachedVisibleSegmentIds.Clear(); currentInfoIndex = -1; currentSpeedLimit = new SpeedValue(-1f); }
private void ShowSigns(bool viewOnly) { NetManager netManager = Singleton <NetManager> .instance; SpeedLimitManager speedLimitManager = SpeedLimitManager.Instance; var currentCamera = new CameraTransformValue(Camera.main); Transform currentCameraTransform = Camera.main.transform; Vector3 camPos = currentCameraTransform.position; if (!LastCachedCamera.Equals(currentCamera)) { // cache visible segments LastCachedCamera = currentCamera; CachedVisibleSegmentIds.Clear(); const float MAX_DIST = TrafficManagerTool.MAX_OVERLAY_DISTANCE * TrafficManagerTool.MAX_OVERLAY_DISTANCE; for (uint segmentId = 1; segmentId < NetManager.MAX_SEGMENT_COUNT; ++segmentId) { if (!Constants.ServiceFactory.NetService.IsSegmentValid((ushort)segmentId)) { continue; } // if ((netManager.m_segments.m_buffer[segmentId].m_flags & // NetSegment.Flags.Untouchable) != NetSegment.Flags.None) continue; Vector3 distToCamera = netManager.m_segments.m_buffer[segmentId].m_bounds.center - camPos; if (distToCamera.sqrMagnitude > MAX_DIST) { continue; // do not draw if too distant } bool visible = MainTool.WorldToScreenPoint( netManager.m_segments.m_buffer[segmentId].m_bounds.center, out Vector3 _); if (!visible) { continue; } if (!speedLimitManager.MayHaveCustomSpeedLimits( (ushort)segmentId, ref netManager.m_segments.m_buffer[segmentId])) { continue; } CachedVisibleSegmentIds.Add((ushort)segmentId); } // end for all segments } for (int segmentIdIndex = CachedVisibleSegmentIds.Size - 1; segmentIdIndex >= 0; segmentIdIndex--) { ushort segmentId = CachedVisibleSegmentIds.Values[segmentIdIndex]; // draw speed limits if ((MainTool.GetToolMode() == ToolMode.VehicleRestrictions) && (segmentId == SelectedSegmentId)) { continue; } // no speed limit overlay on selected segment when in vehicle restrictions mode DrawSpeedLimitHandles( segmentId, ref netManager.m_segments.m_buffer[segmentId], viewOnly, ref camPos); } }
private void ShowSigns(bool viewOnly) { NetManager netManager = Singleton <NetManager> .instance; var currentCamera = new CameraTransformValue(InGameUtil.Instance.CachedMainCamera); Transform currentCameraTransform = InGameUtil.Instance.CachedCameraTransform; Vector3 camPos = currentCameraTransform.position; if (!LastCachedCamera.Equals(currentCamera)) { // cache visible segments LastCachedCamera = currentCamera; CachedVisibleSegmentIds.Clear(); for (uint segmentId = 1; segmentId < NetManager.MAX_SEGMENT_COUNT; ++segmentId) { if (!Constants.ServiceFactory.NetService.IsSegmentValid((ushort)segmentId)) { continue; } // if ((netManager.m_segments.m_buffer[segmentId].m_flags // & NetSegment.Flags.Untouchable) != NetSegment.Flags.None) // continue; Vector3 distToCamera = netManager.m_segments.m_buffer[segmentId].m_bounds.center - camPos; if (distToCamera.sqrMagnitude > TrafficManagerTool.MAX_OVERLAY_DISTANCE_SQR) { continue; // do not draw if too distant } bool visible = GeometryUtil.WorldToScreenPoint( netManager.m_segments.m_buffer[segmentId].m_bounds.center, out Vector3 _); if (!visible) { continue; } if (!parkingManager.MayHaveParkingRestriction((ushort)segmentId)) { continue; } CachedVisibleSegmentIds.Add((ushort)segmentId); } // end for all segments } bool hovered = false; bool clicked = !viewOnly && MainTool.CheckClicked(); for (int segmentIdIndex = CachedVisibleSegmentIds.Size - 1; segmentIdIndex >= 0; segmentIdIndex--) { ushort segmentId = CachedVisibleSegmentIds.Values[segmentIdIndex]; // draw parking restrictions if ((MainTool.GetToolMode() == ToolMode.SpeedLimits) || ((MainTool.GetToolMode() == ToolMode.VehicleRestrictions) && (segmentId == SelectedSegmentId))) { continue; } // no parking restrictions overlay on selected segment when in vehicle restrictions mode var dir = DrawParkingRestrictionHandles( segmentId, clicked, ref netManager.m_segments.m_buffer[segmentId], viewOnly, ref camPos); if (dir != NetInfo.Direction.None) { renderInfo_.SegmentId = segmentId; renderInfo_.FinalDirection = dir; hovered = true; } } if (!hovered) { renderInfo_.SegmentId = 0; renderInfo_.FinalDirection = NetInfo.Direction.None; } }