示例#1
0
        public static void Init()
        {
            if (!TryLoadData(out _lineData))
            {
                Utils.Log((object)"Loading default transport line data.");
                NetManager       instance1 = Singleton <NetManager> .instance;
                TransportManager instance2 = Singleton <TransportManager> .instance;
                int length = instance2.m_lines.m_buffer.Length;
                for (ushort index = 0; index < length; ++index)
                {
                    if (instance2.m_lines.m_buffer[index].Complete)
                    {
                        _lineData[index].TargetVehicleCount = TransportLineUtil.CountLineActiveVehicles(index, out int _);
                    }
                    else
                    {
                        _lineData[index].TargetVehicleCount =
                            OptionsWrapper <Settings> .Options.DefaultVehicleCount;
                    }
                    _lineData[index].BudgetControl = OptionsWrapper <Settings> .Options.BudgetControl;
                    _lineData[index].Depot         = DepotUtil.GetClosestDepot((ushort)index,
                                                                               instance1.m_nodes.m_buffer[(int)instance2.m_lines.m_buffer[index].GetStop(0)].m_position);
                    _lineData[index].Unbunching = OptionsWrapper <Settings> .Options.Unbunching;
                }
            }
            SerializableDataExtension.instance.EventSaveData +=
                new SerializableDataExtension.SaveDataEventHandler(OnSaveData);

            _init = true;
        }
示例#2
0
        public void Show(Vector3 worldMousePosition, InstanceID instanceID)
        {
            this.m_WorldMousePosition = worldMousePosition;
            this.m_InstanceID         = instanceID;
            if (InstanceManager.IsValid(this.m_InstanceID))
            {
                WorldInfoPanel.HideAllWorldInfoPanels();
                NetManager instance      = Singleton <NetManager> .instance;
                ushort     transportLine = instance.m_nodes.m_buffer[(int)this.m_InstanceID.NetNode].m_transportLine;
                this.m_VehicleType.spriteName = PublicTransportWorldInfoPanel.GetVehicleTypeIcon(
                    Singleton <TransportManager> .instance.m_lines.m_buffer[(int)transportLine].Info.m_transportType);
                this.m_StopIndex     = TransportLineUtil.GetStopIndex(transportLine, this.m_InstanceID.NetNode);
                this.m_StopName.text = Singleton <InstanceManager> .instance.GetName(this.m_InstanceID) ??
                                       string.Format(Localization.Get("STOP_LIST_BOX_ROW_STOP"),
                                                     (object)(this.m_StopIndex + 1));

                this.m_SuggestedNames.ClearItems();
                this.m_SuggestedNames.AddItems(
                    this.FindBuildings(instance.m_nodes.m_buffer[(int)this.m_InstanceID.NetNode].m_position),
                    new Func <ushort, string>(this.IDToName));
                this.m_Line.text = Singleton <TransportManager> .instance.GetLineName(transportLine);

                this.Show();
                this.LateUpdate();
            }
            else
            {
                this.Hide();
            }
        }
 private void OnRemoveVehicleClick(UIComponent component, UIMouseEventParameter eventParam)
 {
     SimulationManager.instance.AddAction(() =>
     {
         ushort firstVehicle = 0;
         ushort lineId       = this.GetLineID(out firstVehicle);
         if ((int)lineId == 0 || (int)firstVehicle == 0)
         {
             return;
         }
         CachedTransportLineData.SetBudgetControlState(lineId, false);
         TransportLineUtil.RemoveVehicle(lineId, firstVehicle, true);
     });
 }
示例#4
0
        public static void Postfix(ushort __state)
        {
            var lineID = __state;

            if (!CachedTransportLineData._init || (SimulationManager.instance.m_currentFrameIndex & 4095U) >= 3840U ||
                !TransportManager.instance.m_lines.m_buffer[lineID].Complete)
            {
                return;
            }

            var stops1 = TransportManager.instance.m_lines.m_buffer[lineID].m_stops;
            var stop1  = stops1;

            do
            {
                CachedNodeData.m_cachedNodeData[stop1].StartNewWeek();
                stop1 = TransportLine.GetNextStop(stop1);
            } while (stops1 != stop1 && stop1 != 0);

            var itemClass = TransportManager.instance.m_lines.m_buffer[lineID].Info.m_class;
            var prefabs   =
                VehiclePrefabs.instance.GetPrefabs(itemClass.m_service, itemClass.m_subService, itemClass.m_level);
            var amount = 0;

            TransportLineUtil.CountLineActiveVehicles(lineID, out _, (num3) =>
            {
                var prefabData = Array.Find(prefabs,
                                            item => item.PrefabDataIndex ==
                                            VehicleManager.instance.m_vehicles.m_buffer[num3].Info.m_prefabDataIndex);
                if (prefabData == null)
                {
                    return;
                }
                amount += prefabData.MaintenanceCost;
                CachedVehicleData.m_cachedVehicleData[num3].StartNewWeek(prefabData.MaintenanceCost);
            });
            if (amount != 0)
            {
                Singleton <EconomyManager> .instance.FetchResource(EconomyManager.Resource.Maintenance, amount,
                                                                   TransportManager.instance.m_lines.m_buffer[lineID].Info.m_class);
            }
        }
        private void OnChangeVehicleClick(UIComponent component, UIMouseEventParameter eventParam)
        {
            ushort firstVehicle = 0;
            ushort lineId       = this.GetLineID(out firstVehicle);

            if ((int)lineId == 0)
            {
                return;
            }
            ushort num = !(component.name == "PreviousVehicle") ? TransportLineUtil.GetNextVehicle(lineId, firstVehicle) : TransportLineUtil.GetPreviousVehicle(lineId, firstVehicle);

            if ((int)firstVehicle == (int)num)
            {
                return;
            }
            InstanceID instanceId = new InstanceID();

            instanceId.Vehicle = num;
            WorldInfoPanel.ChangeInstanceID(WorldInfoPanel.GetCurrentInstanceID(), instanceId);
            ToolsModifierControl.cameraController.SetTarget(instanceId, ToolsModifierControl.cameraController.transform.position, Input.GetKey(KeyCode.LeftShift) | Input.GetKey(KeyCode.RightShift));
        }
示例#6
0
        public static int CalculateTargetVehicleCount(ushort lineID)
        {
            var instance = TransportManager.instance;
            int targetVehicleCount;

            if (CachedTransportLineData._lineData[lineID].BudgetControl ||
                instance.m_lines.m_buffer[lineID].Info.m_class.m_service == ItemClass.Service.Disaster)
            {
                targetVehicleCount = instance.m_lines.m_buffer[lineID].CalculateTargetVehicleCount();
                CachedTransportLineData.SetTargetVehicleCount(lineID, targetVehicleCount);
            }
            else
            {
                targetVehicleCount = CachedTransportLineData.GetTargetVehicleCount(lineID);
            }

            var activeVehicles = TransportLineUtil.CountLineActiveVehicles(lineID, out _);

            for (var i = activeVehicles; i < targetVehicleCount - CachedTransportLineData.EnqueuedVehiclesCount(lineID); i++)
            {
                CachedTransportLineData.EnqueueVehicle(lineID, CachedTransportLineData.GetRandomPrefab(lineID));
            }
            return(targetVehicleCount);
        }
        private void UpdateBindings()
        {
            ushort vehicleID = 0;
            ushort lineId    = this.GetLineID(out vehicleID);

            if ((int)lineId == 0)
            {
                this._passengerPanel.Hide();
                this._statsPanel.Hide();
                this._buttonPanel.Hide();
                this._publicTransportVehicleWorldInfoPanel.component.height = 229f;
            }
            else
            {
                this._publicTransportVehicleWorldInfoPanel.component.height = 332f;
                this._editType.isVisible = !OptionsWrapper <Settings> .Options.HideVehicleEditor;
                ItemClass            itemClass  = Singleton <TransportManager> .instance.m_lines.m_buffer[(int)lineId].Info.m_class;
                ItemClass.SubService subService = itemClass.m_subService;
                ItemClass.Service    service    = itemClass.m_service;
                ItemClass.Level      level      = itemClass.m_level;

                switch (subService)
                {
                case ItemClass.SubService.PublicTransportBus:
                case ItemClass.SubService.PublicTransportTours:
                case ItemClass.SubService.PublicTransportMetro:
                case ItemClass.SubService.PublicTransportTrain:
                case ItemClass.SubService.PublicTransportTram:
                case ItemClass.SubService.PublicTransportShip:
                case ItemClass.SubService.PublicTransportPlane:
                case ItemClass.SubService.PublicTransportMonorail:
                case ItemClass.SubService.PublicTransportCableCar:
                case ItemClass.SubService.PublicTransportTrolleybus:
                    this._passengerPanel.Show();
                    if ((int)vehicleID != 0)
                    {
                        this._lastStopExchange.text = string.Format(Localization.Get("VEHICLE_PANEL_LAST_STOP_EXCHANGE"),
                                                                    (object)CachedVehicleData.m_cachedVehicleData[(int)vehicleID].LastStopGonePassengers,
                                                                    (object)CachedVehicleData.m_cachedVehicleData[(int)vehicleID].LastStopNewPassengers);
                    }
                    break;

                case ItemClass.SubService.None:
                    if (service == ItemClass.Service.Disaster && level == ItemClass.Level.Level4)
                    {
                        this._passengerPanel.Show();
                        if ((int)vehicleID != 0)
                        {
                            this._lastStopExchange.text = string.Format(Localization.Get("VEHICLE_PANEL_LAST_STOP_EXCHANGE"),
                                                                        (object)CachedVehicleData.m_cachedVehicleData[(int)vehicleID].LastStopGonePassengers,
                                                                        (object)CachedVehicleData.m_cachedVehicleData[(int)vehicleID].LastStopNewPassengers);
                        }
                    }
                    else
                    {
                        this._passengerPanel.Hide();
                    }
                    break;

                default:
                    this._passengerPanel.Hide();
                    break;
                }
                this._distanceTraveled.parent.Show();
                this._distanceProgress.parent.Show();
                VehicleManager vm = Singleton <VehicleManager> .instance;
                if ((vm.m_vehicles.m_buffer[(int)vehicleID].m_flags & Vehicle.Flags.Stopped) != ~(Vehicle.Flags.Created | Vehicle.Flags.Deleted | Vehicle.Flags.Spawned | Vehicle.Flags.Inverted | Vehicle.Flags.TransferToTarget | Vehicle.Flags.TransferToSource | Vehicle.Flags.Emergency1 | Vehicle.Flags.Emergency2 | Vehicle.Flags.WaitingPath | Vehicle.Flags.Stopped | Vehicle.Flags.Leaving | Vehicle.Flags.Arriving | Vehicle.Flags.Reversed | Vehicle.Flags.TakingOff | Vehicle.Flags.Flying | Vehicle.Flags.Landing | Vehicle.Flags.WaitingSpace | Vehicle.Flags.WaitingCargo | Vehicle.Flags.GoingBack | Vehicle.Flags.WaitingTarget | Vehicle.Flags.Importing | Vehicle.Flags.Exporting | Vehicle.Flags.Parking | Vehicle.Flags.CustomName | Vehicle.Flags.OnGravel | Vehicle.Flags.WaitingLoading | Vehicle.Flags.Congestion | Vehicle.Flags.DummyTraffic | Vehicle.Flags.Underground | Vehicle.Flags.Transition | Vehicle.Flags.InsideBuilding | Vehicle.Flags.LeftHandDrive))
                {
                    if (CachedVehicleData.m_cachedVehicleData[(int)vehicleID].IsUnbunchingInProgress)
                    {
                        this._status.text = Localization.Get("VEHICLE_PANEL_STATUS_UNBUNCHING");
                    }
                    this._distance.text = this._status.text;
                    float num = (float)vm.m_vehicles.m_buffer[(int)vehicleID].m_waitCounter / 12f;
                    int   p   = Mathf.RoundToInt(num * 100f);
                    this._distanceTraveled.value         = num;
                    this._distanceTraveled.progressColor = (Color32)Color.green;
                    this._distanceProgress.text          = LocaleFormatter.FormatPercentage(p);
                }
                else
                {
                    bool   flag = true;
                    string text = Localization.Get("VEHICLE_PANEL_STATUS_NEXT_STOP");
                    if (subService == ItemClass.SubService.PublicTransportShip)
                    {
                        this.UpdateProgress();
                    }
                    else if (subService == ItemClass.SubService.PublicTransportPlane)
                    {
                        if ((vm.m_vehicles.m_buffer[(int)vehicleID].m_flags & Vehicle.Flags.Landing) != ~(Vehicle.Flags.Created | Vehicle.Flags.Deleted | Vehicle.Flags.Spawned | Vehicle.Flags.Inverted | Vehicle.Flags.TransferToTarget | Vehicle.Flags.TransferToSource | Vehicle.Flags.Emergency1 | Vehicle.Flags.Emergency2 | Vehicle.Flags.WaitingPath | Vehicle.Flags.Stopped | Vehicle.Flags.Leaving | Vehicle.Flags.Arriving | Vehicle.Flags.Reversed | Vehicle.Flags.TakingOff | Vehicle.Flags.Flying | Vehicle.Flags.Landing | Vehicle.Flags.WaitingSpace | Vehicle.Flags.WaitingCargo | Vehicle.Flags.GoingBack | Vehicle.Flags.WaitingTarget | Vehicle.Flags.Importing | Vehicle.Flags.Exporting | Vehicle.Flags.Parking | Vehicle.Flags.CustomName | Vehicle.Flags.OnGravel | Vehicle.Flags.WaitingLoading | Vehicle.Flags.Congestion | Vehicle.Flags.DummyTraffic | Vehicle.Flags.Underground | Vehicle.Flags.Transition | Vehicle.Flags.InsideBuilding | Vehicle.Flags.LeftHandDrive) || (vm.m_vehicles.m_buffer[(int)vehicleID].m_flags & Vehicle.Flags.TakingOff) != ~(Vehicle.Flags.Created | Vehicle.Flags.Deleted | Vehicle.Flags.Spawned | Vehicle.Flags.Inverted | Vehicle.Flags.TransferToTarget | Vehicle.Flags.TransferToSource | Vehicle.Flags.Emergency1 | Vehicle.Flags.Emergency2 | Vehicle.Flags.WaitingPath | Vehicle.Flags.Stopped | Vehicle.Flags.Leaving | Vehicle.Flags.Arriving | Vehicle.Flags.Reversed | Vehicle.Flags.TakingOff | Vehicle.Flags.Flying | Vehicle.Flags.Landing | Vehicle.Flags.WaitingSpace | Vehicle.Flags.WaitingCargo | Vehicle.Flags.GoingBack | Vehicle.Flags.WaitingTarget | Vehicle.Flags.Importing | Vehicle.Flags.Exporting | Vehicle.Flags.Parking | Vehicle.Flags.CustomName | Vehicle.Flags.OnGravel | Vehicle.Flags.WaitingLoading | Vehicle.Flags.Congestion | Vehicle.Flags.DummyTraffic | Vehicle.Flags.Underground | Vehicle.Flags.Transition | Vehicle.Flags.InsideBuilding | Vehicle.Flags.LeftHandDrive) || (vm.m_vehicles.m_buffer[(int)vehicleID].m_flags & Vehicle.Flags.Flying) == ~(Vehicle.Flags.Created | Vehicle.Flags.Deleted | Vehicle.Flags.Spawned | Vehicle.Flags.Inverted | Vehicle.Flags.TransferToTarget | Vehicle.Flags.TransferToSource | Vehicle.Flags.Emergency1 | Vehicle.Flags.Emergency2 | Vehicle.Flags.WaitingPath | Vehicle.Flags.Stopped | Vehicle.Flags.Leaving | Vehicle.Flags.Arriving | Vehicle.Flags.Reversed | Vehicle.Flags.TakingOff | Vehicle.Flags.Flying | Vehicle.Flags.Landing | Vehicle.Flags.WaitingSpace | Vehicle.Flags.WaitingCargo | Vehicle.Flags.GoingBack | Vehicle.Flags.WaitingTarget | Vehicle.Flags.Importing | Vehicle.Flags.Exporting | Vehicle.Flags.Parking | Vehicle.Flags.CustomName | Vehicle.Flags.OnGravel | Vehicle.Flags.WaitingLoading | Vehicle.Flags.Congestion | Vehicle.Flags.DummyTraffic | Vehicle.Flags.Underground | Vehicle.Flags.Transition | Vehicle.Flags.InsideBuilding | Vehicle.Flags.LeftHandDrive))
                        {
                            text = this._status.text;
                            flag = false;
                        }
                        this.UpdateProgress();
                    }
                    this._status.text = text;
                    if (flag)
                    {
                        ushort     targetBuilding = vm.m_vehicles.m_buffer[(int)vehicleID].m_targetBuilding;
                        InstanceID id             = new InstanceID();
                        id.NetNode = targetBuilding;
                        string name = Singleton <InstanceManager> .instance.GetName(id);

                        this._target.objectUserData = (object)id;
                        this._target.text           = name == null?string.Format(Localization.Get("STOP_LIST_BOX_ROW_STOP"), (object)(TransportLineUtil.GetStopIndex(lineId, targetBuilding) + 1)) : name;

                        this._target.Enable();
                        this._target.Show();
                    }
                    this._distance.text = ColossalFramework.Globalization.Locale.Get(this._distance.localeID);
                    this._distanceTraveled.progressColor = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue);
                }
                this._statsPanel.Show();
                this._passengersCurrentWeek.text = CachedVehicleData.m_cachedVehicleData[(int)vehicleID].PassengersThisWeek.ToString();
                this._passengersLastWeek.text    = CachedVehicleData.m_cachedVehicleData[(int)vehicleID].PassengersLastWeek.ToString();
                this._passengersAverage.text     = CachedVehicleData.m_cachedVehicleData[(int)vehicleID].PassengersAverage.ToString();
                PrefabData prefabData          = Array.Find(VehiclePrefabs.instance.GetPrefabs(service, subService, level), item => item.PrefabDataIndex == vm.m_vehicles.m_buffer[(int)vehicleID].Info.m_prefabDataIndex);
                int        num1                = CachedVehicleData.m_cachedVehicleData[(int)vehicleID].IncomeThisWeek - prefabData.MaintenanceCost;
                UILabel    earningsCurrentWeek = this._earningsCurrentWeek;
                float      num2                = (float)num1 * 0.01f;
                string     str1                = num2.ToString(ColossalFramework.Globalization.Locale.Get("MONEY_FORMAT"), (IFormatProvider)LocaleManager.cultureInfo);
                earningsCurrentWeek.text            = str1;
                this._earningsCurrentWeek.textColor = (Color32)this.GetColor((float)num1);
                int     incomeLastWeek   = CachedVehicleData.m_cachedVehicleData[(int)vehicleID].IncomeLastWeek;
                UILabel earningsLastWeek = this._earningsLastWeek;
                num2 = (float)incomeLastWeek * 0.01f;
                string str2 = num2.ToString(ColossalFramework.Globalization.Locale.Get("MONEY_FORMAT"), (IFormatProvider)LocaleManager.cultureInfo);
                earningsLastWeek.text            = str2;
                this._earningsLastWeek.textColor = (Color32)this.GetColor((float)incomeLastWeek);
                int     incomeAverage   = CachedVehicleData.m_cachedVehicleData[(int)vehicleID].IncomeAverage;
                UILabel earningsAverage = this._earningsAverage;
                num2 = (float)incomeAverage * 0.01f;
                string str3 = num2.ToString(ColossalFramework.Globalization.Locale.Get("MONEY_FORMAT"), (IFormatProvider)LocaleManager.cultureInfo);
                earningsAverage.text            = str3;
                this._earningsAverage.textColor = (Color32)this.GetColor((float)incomeAverage);
                this._buttonPanel.Show();
            }
        }
示例#8
0
        public static string GenerateStopName(string name, ushort node, int stopIndex)
        {
            string str;

            if (string.IsNullOrEmpty(name))
            {
                if (stopIndex == -1)
                {
                    ushort transportLine = Singleton <NetManager> .instance.m_nodes.m_buffer[node].m_transportLine;
                    str = string.Format("{0} #{1}", (object)Singleton <TransportManager> .instance.GetLineName(transportLine), (object)(TransportLineUtil.GetStopIndex(transportLine, node) + 1));
                }
                else
                {
                    str = string.Format(Localization.Get("STOP_LIST_BOX_ROW_STOP"), (object)stopIndex);
                }
            }
            else
            {
                str = name;
            }
            return(str);
        }