CSL_Traffic.RoadCustomizerTool.SetNodeMarkers C# (CSharp) Метод

SetNodeMarkers() приватный Метод

private SetNodeMarkers ( ushort nodeId, FastList nodeMarkers ) : void
nodeId ushort
nodeMarkers FastList
Результат void
		void SetNodeMarkers(ushort nodeId, FastList<NodeLaneMarker> nodeMarkers)
		{
			NetNode node = NetManager.instance.m_nodes.m_buffer[nodeId];
			int offsetMultiplier = node.CountSegments() <= 2 ? 3 : 1;
			ushort segmentId = node.m_segment0;
			for (int i = 0; i < 8 && segmentId != 0; i++)
			{
				NetSegment segment = NetManager.instance.m_segments.m_buffer[segmentId];
				bool isEndNode = segment.m_endNode == nodeId;
				Vector3 offset = segment.FindDirection(segmentId, nodeId) * offsetMultiplier;
				NetInfo.Lane[] lanes = segment.Info.m_lanes;
				uint laneId = segment.m_lanes;
				for (int j = 0; j < lanes.Length && laneId != 0; j++)
				{
                    //if ((lanes[j].m_laneType & (NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle)) != NetInfo.LaneType.None)
                    if ((lanes[j].m_laneType & NetInfo.LaneType.Vehicle) == NetInfo.LaneType.Vehicle)
                    {
						Vector3 pos = Vector3.zero;
						NetInfo.Direction laneDir = ((segment.m_flags & NetSegment.Flags.Invert) == NetSegment.Flags.None) ? lanes[j].m_finalDirection : NetInfo.InvertDirection(lanes[j].m_finalDirection);

						bool isSource = false;
						if (isEndNode)
						{
							if ((laneDir & (NetInfo.Direction.Forward | NetInfo.Direction.Avoid)) == NetInfo.Direction.Forward)
								isSource = true;
							pos = NetManager.instance.m_lanes.m_buffer[laneId].m_bezier.d;
						}
						else
						{
							if ((laneDir & (NetInfo.Direction.Backward | NetInfo.Direction.Avoid)) == NetInfo.Direction.Backward)
								isSource = true;
							pos = NetManager.instance.m_lanes.m_buffer[laneId].m_bezier.a;
						}

						nodeMarkers.Add(new NodeLaneMarker()
						{
							m_lane = laneId,
							m_node = nodeId,
							m_position = pos + offset,
							m_color = colors[nodeMarkers.m_size],
							m_isSource = isSource,
						});
					}

					laneId = NetManager.instance.m_lanes.m_buffer[laneId].m_nextLane;   
				}

				segmentId = segment.GetRightSegment(nodeId);
				if (segmentId == node.m_segment0)
					segmentId = 0;
			}

			for (int i = 0; i < nodeMarkers.m_size; i++)
			{
				if (!nodeMarkers.m_buffer[i].m_isSource)
					continue;

				uint[] connections = LaneManager.GetLaneConnections(nodeMarkers.m_buffer[i].m_lane);
				if (connections == null || connections.Length == 0)
					continue;

				for (int j = 0; j < nodeMarkers.m_size; j++)
				{
					if (nodeMarkers.m_buffer[j].m_isSource)
						continue;

					if (connections.Contains(nodeMarkers.m_buffer[j].m_lane))
						nodeMarkers.m_buffer[i].m_connections.Add(nodeMarkers.m_buffer[j]);
				}
			}
		}

Same methods

RoadCustomizerTool::SetNodeMarkers ( ushort nodeId, bool overwrite = false ) : void

Usage Example

Пример #1
0
            public override void OnLoadData()
            {
                if ((CSLTraffic.Options & OptionsManager.ModOptions.BetaTestRoadCustomizerTool) == OptionsManager.ModOptions.None || (CSLTraffic.Options & OptionsManager.ModOptions.GhostMode) == OptionsManager.ModOptions.GhostMode)
                {
                    return;
                }

                Debug.Log("Traffic++: Loading road data!");
                byte[] data = serializableDataManager.LoadData(LANE_DATA_ID);
                if (data == null)
                {
                    Debug.Log("Traffic++: No road data to load!");
                    return;
                }

                MemoryStream memStream = new MemoryStream();

                memStream.Write(data, 0, data.Length);
                memStream.Position = 0;

                BinaryFormatter binaryFormatter = new BinaryFormatter();

                try
                {
                    RoadManager.sm_lanes = (Lane[])binaryFormatter.Deserialize(memStream);

                    FastList <ushort> nodesList = new FastList <ushort>();
                    foreach (Lane lane in RoadManager.sm_lanes)
                    {
                        if (lane == null)
                        {
                            continue;
                        }

                        lane.UpdateArrows();
                        if (lane.ConnectionCount() > 0)
                        {
                            nodesList.Add(lane.m_nodeId);
                        }
                    }

                    RoadCustomizerTool customizerTool = ToolsModifierControl.GetTool <RoadCustomizerTool>();
                    foreach (ushort nodeId in nodesList)
                    {
                        customizerTool.SetNodeMarkers(nodeId);
                    }
                }
                catch (Exception e)
                {
                    Debug.Log("Traffic++: Unexpected " + e.GetType().Name + " loading road data.");
                }
                finally
                {
                    memStream.Close();
                }
            }
All Usage Examples Of CSL_Traffic.RoadCustomizerTool::SetNodeMarkers