Example #1
0
        public static IntVec3 TradeDropSpot(Map map)
        {
            IEnumerable <Building> collection = from b in map.listerBuildings.allBuildingsColonist
                                                where b.def.IsCommsConsole
                                                select b;
            IEnumerable <Building> enumerable = from b in map.listerBuildings.allBuildingsColonist
                                                where b.def.IsOrbitalTradeBeacon
                                                select b;
            Building building = enumerable.FirstOrDefault((Building b) => !map.roofGrid.Roofed(b.Position) && DropCellFinder.AnyAdjacentGoodDropSpot(b.Position, map, false, false));
            IntVec3  position;

            if (building != null)
            {
                position = building.Position;
                IntVec3 result;
                if (!DropCellFinder.TryFindDropSpotNear(position, map, out result, false, false))
                {
                    Log.Error("Could find no good TradeDropSpot near dropCenter " + position + ". Using a random standable unfogged cell.", false);
                    result = CellFinderLoose.RandomCellWith((IntVec3 c) => c.Standable(map) && !c.Fogged(map), map, 1000);
                }
                return(result);
            }
            List <Building> list = new List <Building>();

            list.AddRange(enumerable);
            list.AddRange(collection);
            list.RemoveAll(delegate(Building b)
            {
                CompPowerTrader compPowerTrader = b.TryGetComp <CompPowerTrader>();
                return(compPowerTrader != null && !compPowerTrader.PowerOn);
            });
            Predicate <IntVec3> validator = (IntVec3 c) => DropCellFinder.IsGoodDropSpot(c, map, false, false);

            if (!list.Any <Building>())
            {
                list.AddRange(map.listerBuildings.allBuildingsColonist);
                list.Shuffle <Building>();
                if (!list.Any <Building>())
                {
                    return(CellFinderLoose.RandomCellWith(validator, map, 1000));
                }
            }
            int num = 8;

            while (true)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    IntVec3 position2 = list[i].Position;
                    if (CellFinder.TryFindRandomCellNear(position2, map, num, validator, out position, -1))
                    {
                        return(position);
                    }
                }
                num = Mathf.RoundToInt((float)num * 1.1f);
                if (num > map.Size.x)
                {
                    goto Block_9;
                }
            }
            return(position);

Block_9:
            Log.Error("Failed to generate trade drop center. Giving random.", false);
            return(CellFinderLoose.RandomCellWith(validator, map, 1000));
        }