public override void SimulationStep(ushort segmentID, ref NetSegment data) { NetManager instance = Singleton <NetManager> .instance; if ((instance.m_nodes.m_buffer[(int)data.m_startNode].m_flags & NetNode.Flags.Temporary) == NetNode.Flags.None) { if (data.m_path == 0u || (ulong)(Singleton <SimulationManager> .instance.m_currentFrameIndex >> 8 & 15u) == (ulong)((long)(segmentID & 15))) { BusTransportLineAI.StartPathFind(segmentID, ref data, this.m_netService, this.m_vehicleType, false); } else { BusTransportLineAI.UpdatePath(segmentID, ref data, this.m_netService, this.m_vehicleType, false); } } }
public static bool UpdatePaths(ref TransportLine transportLine, ushort lineID) { bool flag = true; NetManager instance = Singleton <NetManager> .instance; ushort stops = transportLine.m_stops; ushort num = stops; int num2 = 0; while (num != 0) { ushort num3 = 0; for (int i = 0; i < 8; i++) { ushort segment = instance.m_nodes.m_buffer[(int)num].GetSegment(i); if (segment != 0 && instance.m_segments.m_buffer[(int)segment].m_startNode == num) { TransportInfo info = transportLine.Info; if (!BusTransportLineAI.UpdatePath(segment, ref instance.m_segments.m_buffer[(int)segment], info.m_netService, info.m_vehicleType, (transportLine.m_flags & TransportLine.Flags.Temporary) != TransportLine.Flags.None)) { flag = false; } num3 = instance.m_segments.m_buffer[(int)segment].m_endNode; break; } } num = num3; if (num == stops) { break; } if (!flag) { break; } if (++num2 >= 32768) { CODebugBase <LogChannel> .Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break; } } return(flag); }