private static void OnSaveData()
        {
            FastList <byte> data = new FastList <byte>();

            try
            {
                SerializableDataExtension.WriteString(TransportLineMod._dataVersion, data);
                for (ushort lineID = 0; (int)lineID < 256; ++lineID)
                {
                    SerializableDataExtension.AddToData(BitConverter.GetBytes(TransportLineMod.GetTargetVehicleCount(lineID)), data);
                    SerializableDataExtension.AddToData(BitConverter.GetBytes(Mathf.Max(TransportLineMod.GetNextSpawnTime(lineID) - SimHelper.instance.SimulationTime, 0.0f)), data);
                    SerializableDataExtension.AddToData(BitConverter.GetBytes(TransportLineMod.GetBudgetControlState(lineID)), data);
                    SerializableDataExtension.AddToData(BitConverter.GetBytes(TransportLineMod.GetDepot(lineID)), data);
                    int num = 0;
                    HashSet <string> prefabs = TransportLineMod.GetPrefabs(lineID);
                    if (prefabs != null)
                    {
                        num = prefabs.Count;
                    }
                    SerializableDataExtension.AddToData(BitConverter.GetBytes(num), data);
                    if (num > 0)
                    {
                        foreach (string s in prefabs)
                        {
                            SerializableDataExtension.WriteString(s, data);
                        }
                    }
                    string[] enqueuedVehicles = TransportLineMod.GetEnqueuedVehicles(lineID);
                    SerializableDataExtension.AddToData(BitConverter.GetBytes(enqueuedVehicles.Length), data);
                    if (enqueuedVehicles.Length != 0)
                    {
                        foreach (string s in enqueuedVehicles)
                        {
                            SerializableDataExtension.WriteString(s, data);
                        }
                    }
                    SerializableDataExtension.WriteBool(TransportLineMod.GetUnbunchingState(lineID), data);
                }
                SerializableDataExtension.instance.SerializableData.SaveData(TransportLineMod._dataID, data.ToArray());
            }
            catch (Exception ex)
            {
                string msg = "Error while saving transport line data! " + ex.Message + " " + (object)ex.InnerException;
                Utils.LogError((object)msg);
                CODebugBase <LogChannel> .Log(LogChannel.Modding, msg, ErrorLevel.Error);
            }
        }
示例#2
0
        private static bool IsUnbunchingDone(ushort vehicleID, ref Vehicle vehicleData)
        {
            bool flag;

            try
            {
                if ((int)vehicleData.m_transportLine == 0 || (int)ImprovedPublicTransportMod.Settings.IntervalAggressionFactor == 0 || (!TransportLineMod.GetUnbunchingState(vehicleData.m_transportLine) || (int)vehicleData.m_waitCounter >= (int)(byte)Mathf.Min((int)ImprovedPublicTransportMod.Settings.IntervalAggressionFactor * 6 + 12, (int)byte.MaxValue)))
                {
                    flag = true;
                }
                else
                {
                    TransportManager instance1 = Singleton <TransportManager> .instance;
                    int length = instance1.m_lines.m_buffer[(int)vehicleData.m_transportLine].CountVehicles(vehicleData.m_transportLine);
                    if (length == 1)
                    {
                        flag = true;
                    }
                    else
                    {
                        ushort currentStop = VehicleManagerMod.m_cachedVehicleData[(int)vehicleID].CurrentStop;
                        if ((int)currentStop != 0 && !NetManagerMod.m_cachedNodeData[(int)currentStop].Unbunching)
                        {
                            flag = true;
                        }
                        else if ((int)vehicleData.m_lastFrame != 0)
                        {
                            flag = false;
                        }
                        else
                        {
                            ushort         vehicleID1 = instance1.m_lines.m_buffer[(int)vehicleData.m_transportLine].m_vehicles;
                            VehicleManager instance2  = Singleton <VehicleManager> .instance;
                            float          max        = 0.0f;
                            ushort[]       numArray   = new ushort[length];
                            float[]        keys       = new float[length];
                            for (int index = 0; index < length; ++index)
                            {
                                float current;
                                BusAIMod.GetProgressStatus(vehicleID1, ref instance2.m_vehicles.m_buffer[(int)vehicleID1], out current, out max);
                                numArray[index] = vehicleID1;
                                keys[index]     = current;
                                vehicleID1      = instance2.m_vehicles.m_buffer[(int)vehicleID1].m_nextLineVehicle;
                            }
                            Array.Sort <float, ushort>(keys, numArray);
                            int index1 = Array.IndexOf <ushort>(numArray, vehicleID);
                            if (index1 == -1)
                            {
                                flag = true;
                            }
                            else
                            {
                                int index2 = index1 + 1;
                                if (index2 == length)
                                {
                                    index2 = 0;
                                }
                                float num = keys[index2] - keys[index1];
                                if ((double)num < 0.0)
                                {
                                    num += max;
                                }
                                flag = (double)num > (double)max / (double)length * 0.899999976158142;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (BusAIMod._isDeployed)
                {
                    Utils.Log((object)(ex.Message + System.Environment.NewLine + System.Environment.StackTrace));
                }
                flag = true;
            }
            VehicleManagerMod.m_cachedVehicleData[(int)vehicleID].IsUnbunchingInProgress = !flag;
            return(flag);
        }