Пример #1
0
        public static CellRect FindUsableRect(int width, int height, Map map, float minFertility = 0f, bool noItems = false)
        {
            IntVec3  center = map.Center;
            float    num    = 1f;
            CellRect cellRect;

            for (;;)
            {
                IntVec3 center2 = center + new IntVec3((int)Rand.Range(-num, num), 0, (int)Rand.Range(-num, num));
                cellRect        = CellRect.CenteredOn(center2, width / 2);
                cellRect.Width  = width;
                cellRect.Height = height;
                cellRect        = cellRect.ExpandedBy(1);
                bool flag = true;
                CellRect.CellRectIterator iterator = cellRect.GetIterator();
                while (!iterator.Done())
                {
                    IntVec3 intVec = iterator.Current;
                    if (intVec.Fogged(map) || !intVec.Walkable(map) || !intVec.GetTerrain(map).affordances.Contains(TerrainAffordanceDefOf.Heavy) || intVec.GetTerrain(map).fertility < minFertility || intVec.GetZone(map) != null || TutorUtility.ContainsBlockingThing(intVec, map, noItems) || intVec.InNoBuildEdgeArea(map) || intVec.InNoZoneEdgeArea(map))
                    {
                        flag = false;
                        break;
                    }
                    iterator.MoveNext();
                }
                if (flag)
                {
                    break;
                }
                num += 0.25f;
            }
            return(cellRect.ContractedBy(1));
        }
Пример #2
0
        public static CellRect FindUsableRect(int width, int height, Map map, float minFertility = 0f, bool noItems = false)
        {
            IntVec3  center = map.Center;
            float    num    = 1f;
            CellRect cellRect;

            while (true)
            {
                IntVec3 center2 = center + new IntVec3((int)Rand.Range((float)(0.0 - num), num), 0, (int)Rand.Range((float)(0.0 - num), num));
                cellRect        = CellRect.CenteredOn(center2, width / 2);
                cellRect.Width  = width;
                cellRect.Height = height;
                cellRect        = cellRect.ExpandedBy(1);
                bool flag = true;
                CellRect.CellRectIterator iterator = cellRect.GetIterator();
                while (!iterator.Done())
                {
                    IntVec3 current = iterator.Current;
                    if (!current.Fogged(map) && current.Walkable(map) && current.GetTerrain(map).affordances.Contains(TerrainAffordance.Heavy) && !(current.GetTerrain(map).fertility < minFertility) && current.GetZone(map) == null && !TutorUtility.ContainsBlockingThing(current, map, noItems) && !current.InNoBuildEdgeArea(map) && !current.InNoZoneEdgeArea(map))
                    {
                        iterator.MoveNext();
                        continue;
                    }
                    flag = false;
                    break;
                }
                if (!flag)
                {
                    num = (float)(num + 0.25);
                    continue;
                }
                break;
            }
            return(cellRect.ContractedBy(1));
        }