コード例 #1
0
        public static IEnumerable <int> GetPrefabs(ushort buildingId)
        {
            var info        = BuildingManager.instance.m_buildings.m_buffer[buildingId].Info;
            var service     = info.GetService();
            var subService  = info.GetSubService();
            var level       = info.GetClassLevel();
            var service2    = info.GetService();
            var subService2 = ItemClass.SubService.None;
            var level2      = ItemClass.Level.None;

            // Special handling for player industry ... follows logic in WarehouseAI::GetTransferVehicleService.
            bool ignoreLevel = false;

            if (info.GetAI() is PostOfficeAI)
            {
                ignoreLevel = true;
            }
            else if (info.GetAI() is CargoStationAI cargoStationAI)
            {
                if (cargoStationAI.m_transportInfo != null && cargoStationAI.m_transportInfo.m_netSubService == ItemClass.SubService.PublicTransportTrain)
                {
                    subService2 = ItemClass.SubService.PublicTransportTrain;
                    level2      = ItemClass.Level.Level4;
                }
            }
            else if (service == ItemClass.Service.PlayerIndustry)
            {
                service    = ItemClass.Service.Industrial;
                subService = ItemClass.SubService.None;

                var material = TransferManagerInfo.GetSupplyBuildingOutputMaterial(buildingId);
                switch (material)
                {
                case TransferManager.TransferReason.Oil:
                case TransferManager.TransferReason.Petroleum:
                case TransferManager.TransferReason.Plastics:
                    subService = ItemClass.SubService.IndustrialOil;
                    break;

                case TransferManager.TransferReason.Ore:
                case TransferManager.TransferReason.Coal:
                case TransferManager.TransferReason.Glass:
                case TransferManager.TransferReason.Metals:
                    subService = ItemClass.SubService.IndustrialOre;
                    break;

                case TransferManager.TransferReason.Logs:
                case TransferManager.TransferReason.Paper:
                case TransferManager.TransferReason.PlanedTimber:
                    subService = ItemClass.SubService.IndustrialForestry;
                    break;

                case TransferManager.TransferReason.Grain:
                case TransferManager.TransferReason.Flours:
                    subService = ItemClass.SubService.IndustrialFarming;
                    break;

                case TransferManager.TransferReason.Goods:
                    subService = ItemClass.SubService.IndustrialGeneric;
                    break;

                case TransferManager.TransferReason.AnimalProducts:
                    service    = ItemClass.Service.PlayerIndustry;
                    subService = ItemClass.SubService.PlayerIndustryFarming;
                    break;

                case TransferManager.TransferReason.LuxuryProducts:
                    service     = ItemClass.Service.PlayerIndustry;
                    ignoreLevel = true;
                    break;

                default:
                    if (material != TransferManager.TransferReason.Petrol)
                    {
                        if (material != TransferManager.TransferReason.Food)
                        {
                            if (material != TransferManager.TransferReason.Lumber)
                            {
                                service = ItemClass.Service.None;
                                break;
                            }
                            goto case TransferManager.TransferReason.Logs;
                        }
                        else
                        {
                            goto case TransferManager.TransferReason.Grain;
                        }
                    }
                    else
                    {
                        goto case TransferManager.TransferReason.Oil;
                    }
                }
            }

            // Spit out the prefab names ...
            foreach (var prefabIndex in PrefabNames.Keys)
            {
                var prefab = PrefabCollection <VehicleInfo> .GetPrefab((uint)prefabIndex);

                if (prefab.m_class.m_service == service &&
                    prefab.m_class.m_subService == subService &&
                    (prefab.m_class.m_level == level || ignoreLevel))
                {
                    yield return(prefabIndex);
                }
                else if (prefab.m_class.m_service == service2 &&
                         prefab.m_class.m_subService == subService2 &&
                         prefab.m_class.m_level == level2)
                {
                    yield return(prefabIndex);
                }
            }
        }