示例#1
0
        // Token: 0x060005D9 RID: 1497 RVA: 0x0003930C File Offset: 0x0003770C
        private static bool TryFindSpotToPlaceHaulableCloseTo(Thing haulable, Pawn worker, IntVec3 center, IntVec3 center2, int radius, out IntVec3 spot)
        {
            Region region = center.GetRegion(worker.Map, RegionType.Set_Passable);

            if (region == null)
            {
                spot = center;
                return(false);
            }
            TraverseParms traverseParms = TraverseParms.For(worker, Danger.Deadly, TraverseMode.ByPawn, false);
            IntVec3       foundCell     = IntVec3.Invalid;

            RegionTraverser.BreadthFirstTraverse(region, (Region from, Region r) => r.Allows(traverseParms, false), delegate(Region r)
            {
                XenomorphUtil.candidates.Clear();
                XenomorphUtil.candidates.AddRange(r.Cells);
                XenomorphUtil.candidates.Sort((IntVec3 a, IntVec3 b) => a.DistanceToSquared(center).CompareTo(b.DistanceToSquared(center)));
                for (int i = 0; i < XenomorphUtil.candidates.Count; i++)
                {
                    IntVec3 intVec = XenomorphUtil.candidates[i];
                    if (XenomorphUtil.HaulablePlaceValidator(haulable, worker, intVec, center2, radius))
                    {
                        foundCell = intVec;
                        return(true);
                    }
                }
                return(false);
            }, 100, RegionType.Set_Passable);
            if (foundCell.IsValid)
            {
                spot = foundCell;
                return(true);
            }
            spot = center;
            return(false);
        }