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     = TransportLineMod.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();
            }
        }
예제 #2
0
 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;
         }
         TransportLineMod.SetBudgetControlState(lineId, false);
         TransportLineMod.RemoveVehicle(lineId, firstVehicle, true);
     });
 }
 public static void OnResetButtonClick()
 {
     if (!ImprovedPublicTransportMod.inGame)
     {
         return;
     }
     SimulationManager.instance.AddAction(() =>
     {
         int length = Singleton <TransportManager> .instance.m_lines.m_buffer.Length;
         for (int index = 0; index < length; ++index)
         {
             TransportLineMod.SetNextSpawnTime((ushort)index, 0.0f);
         }
     });
 }
 private void Update()
 {
     if (!this._initialized)
     {
         return;
     }
     if (this.SimulationLineCount > this.KnownLineCount)
     {
         Array16 <TransportLine> lines = Singleton <TransportManager> .instance.m_lines;
         for (ushort lineID = 0; (uint)lineID < lines.m_size; ++lineID)
         {
             if (LineWatcher.IsValid(ref lines.m_buffer[(int)lineID]) && this._knownLines.Add(lineID))
             {
                 TransportLineMod.SetLineDefaults(lineID);
                 Vector3 position     = Singleton <NetManager> .instance.m_nodes.m_buffer[(int)lines.m_buffer[(int)lineID].GetStop(0)].m_position;
                 ushort  closestDepot = TransportLineMod.GetClosestDepot(lineID, position);
                 if ((int)closestDepot != 0)
                 {
                     TransportLineMod.SetDepot(lineID, closestDepot);
                 }
                 if (OptionsWrapper <Settings> .Options.ShowLineInfo && lines.m_buffer[(int)lineID].Info?.m_class?.m_service != ItemClass.Service.Disaster)
                 {
                     WorldInfoPanel.Show <PublicTransportWorldInfoPanel>(position, new InstanceID()
                     {
                         TransportLine = lineID
                     });
                 }
             }
         }
     }
     else
     {
         if (this.SimulationLineCount >= this.KnownLineCount)
         {
             return;
         }
         Array16 <TransportLine> lines = Singleton <TransportManager> .instance.m_lines;
         for (ushort index = 0; (uint)index < lines.m_size; ++index)
         {
             if (!LineWatcher.IsValid(ref lines.m_buffer[(int)index]))
             {
                 this._knownLines.Remove(index);
             }
         }
     }
 }
 public static void OnBudgetCheckChanged(bool isChecked)
 {
     if (!ImprovedPublicTransportMod.inGame)
     {
         return;
     }
     SimulationManager.instance.AddAction(() =>
     {
         TransportManager instance = Singleton <TransportManager> .instance;
         int length = instance.m_lines.m_buffer.Length;
         for (int index = 0; index < length; ++index)
         {
             if (!instance.m_lines.m_buffer[index].Complete)
             {
                 TransportLineMod.SetBudgetControlState((ushort)index, isChecked);
             }
         }
     });
 }
 public static void OnDefaultVehicleCountSubmitted(int count)
 {
     if (!ImprovedPublicTransportMod.inGame)
     {
         return;
     }
     SimulationManager.instance.AddAction(() =>
     {
         TransportManager instance = Singleton <TransportManager> .instance;
         int length = instance.m_lines.m_buffer.Length;
         for (int index = 0; index < length; ++index)
         {
             if (!instance.m_lines.m_buffer[index].Complete)
             {
                 TransportLineMod.SetTargetVehicleCount((ushort)index, count);
             }
         }
     });
 }
예제 #7
0
        private void Deinit()
        {
            Redirector <TramAIDetour> .Revert();

            Redirector <PassengerTrainAIDetour> .Revert();

            Redirector <PassengerShipAIDetour> .Revert();

            Redirector <PassengerPlaneAIDetour> .Revert();

            Redirector <PassengerFerryAIDetour> .Revert();

            Redirector <PassengerBlimpAIDetour> .Revert();

            Redirector <BusAIDetour> .Revert();

            Redirector <CommonBuildingAIReverseDetour> .Revert();

            Redirector <PublicTransportStopButtonDetour> .Revert();

            Redirector <PublicTransportVehicleButtonDetour> .Revert();

            Redirector <PublicTransportWorldInfoPanelDetour> .Revert();

            TransportLineMod.Deinit();
            BuildingExtension.Deinit();
            NetManagerMod.Deinit();
            VehicleManagerMod.Deinit();
            VehiclePrefabs.Deinit();
            SerializableDataExtension.instance.Loaded = false;
            LocaleModifier.Deinit();

            if ((UnityEngine.Object) this._iptGameObject != (UnityEngine.Object)null)
            {
                UnityEngine.Object.Destroy((UnityEngine.Object) this._iptGameObject);
            }
            if (!((UnityEngine.Object) this._worldInfoPanel != (UnityEngine.Object)null))
            {
                return;
            }
            UnityEngine.Object.Destroy((UnityEngine.Object) this._worldInfoPanel);
        }
 public static void OnUpdateButtonClick()
 {
     if (!ImprovedPublicTransportMod.inGame)
     {
         return;
     }
     SimulationManager.instance.AddAction(() =>
     {
         int length        = Singleton <TransportManager> .instance.m_lines.m_buffer.Length;
         var budgetControl = OptionsWrapper <Settings> .Options.BudgetControl;
         for (int index = 0; index < length; ++index)
         {
             TransportLineMod.SetBudgetControlState((ushort)index, budgetControl);
             if (budgetControl)
             {
                 TransportLineMod.ClearEnqueuedVehicles((ushort)index);
             }
         }
     });
 }
예제 #9
0
        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") ? TransportLineMod.GetNextVehicle(lineId, firstVehicle) : TransportLineMod.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));
        }
        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)(TransportLineMod.GetStopIndex(transportLine, node) + 1));
                }
                else
                {
                    str = string.Format(Localization.Get("STOP_LIST_BOX_ROW_STOP"), (object)stopIndex);
                }
            }
            else
            {
                str = name;
            }
            return(str);
        }
예제 #11
0
        public override void OnLevelLoaded(LoadMode mode)
        {
            base.OnLevelLoaded(mode);
            if (mode != LoadMode.LoadGame && mode != LoadMode.NewGame && mode != LoadMode.NewGameFromScenario)
            {
                return;
            }
            inGame = true;
            try
            {
                Utils.Log((object)$"Begin init version: {version}");
                this.ReleaseUnusedCitizenUnits();
                UIView objectOfType = UnityEngine.Object.FindObjectOfType <UIView>();
                if ((UnityEngine.Object)objectOfType != (UnityEngine.Object)null)
                {
                    this._iptGameObject = new GameObject("IptGameObject");
                    this._iptGameObject.transform.parent = objectOfType.transform;
                    this._iptGameObject.AddComponent <SimHelper>();
                    this._iptGameObject.AddComponent <LineWatcher>();
                    this._worldInfoPanel = new GameObject("PublicTransportStopWorldInfoPanel");
                    this._worldInfoPanel.transform.parent = objectOfType.transform;
                    this._worldInfoPanel.AddComponent <PublicTransportStopWorldInfoPanel>();
                    NetManagerMod.Init();
                    VehicleManagerMod.Init();
                    Redirector <BusAIDetour> .Deploy();

                    Redirector <PassengerTrainAIDetour> .Deploy();

                    Redirector <PassengerShipAIDetour> .Deploy();

                    Redirector <PassengerPlaneAIDetour> .Deploy();

                    Redirector <PassengerFerryAIDetour> .Deploy();

                    Redirector <PassengerBlimpAIDetour> .Deploy();

                    Redirector <TramAIDetour> .Deploy();

                    Redirector <CommonBuildingAIReverseDetour> .Deploy();

                    Redirector <PublicTransportStopButtonDetour> .Deploy();

                    Redirector <PublicTransportVehicleButtonDetour> .Deploy();

                    Redirector <PublicTransportWorldInfoPanelDetour> .Deploy();

                    BuildingExtension.Init();
                    LineWatcher.instance.Init();
                    TransportLineMod.Init();
                    VehiclePrefabs.Init();
                    SerializableDataExtension.instance.Loaded = true;
                    LocaleModifier.Init();
                    this._iptGameObject.AddComponent <VehicleEditor>();
                    this._iptGameObject.AddComponent <PanelExtenderLine>();
                    this._iptGameObject.AddComponent <PanelExtenderVehicle>();
                    this._iptGameObject.AddComponent <PanelExtenderCityService>();
                    Utils.Log((object)"Loading done!");
                }
                else
                {
                    Utils.LogError((object)"UIView not found, aborting!");
                }
            }
            catch (Exception ex)
            {
                Utils.LogError((object)("Error during initialization, IPT disables itself." + System.Environment.NewLine + "Please try again without any other mod." + System.Environment.NewLine + "Please upload your log file and post the link here if that didn't help:" + System.Environment.NewLine + "http://steamcommunity.com/workshop/filedetails/discussion/424106600/615086038663282271/" + System.Environment.NewLine + ex.Message + System.Environment.NewLine + (object)ex.InnerException + System.Environment.NewLine + ex.StackTrace));
                this.Deinit();
            }
        }
예제 #12
0
        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:
                    this._passengerPanel.Show();
                    if ((int)vehicleID != 0)
                    {
                        this._lastStopExchange.text = string.Format(Localization.Get("VEHICLE_PANEL_LAST_STOP_EXCHANGE"),
                                                                    (object)VehicleManagerMod.m_cachedVehicleData[(int)vehicleID].LastStopGonePassengers,
                                                                    (object)VehicleManagerMod.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)VehicleManagerMod.m_cachedVehicleData[(int)vehicleID].LastStopGonePassengers,
                                                                        (object)VehicleManagerMod.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 (VehicleManagerMod.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)(TransportLineMod.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 = VehicleManagerMod.m_cachedVehicleData[(int)vehicleID].PassengersThisWeek.ToString();
                this._passengersLastWeek.text    = VehicleManagerMod.m_cachedVehicleData[(int)vehicleID].PassengersLastWeek.ToString();
                this._passengersAverage.text     = VehicleManagerMod.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                = VehicleManagerMod.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   = VehicleManagerMod.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   = VehicleManagerMod.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();
            }
        }