//RoomGroup

        public static WaterRoom GetRoom(this Thing thing, RegionType allowedRegionTypes = RegionType.Set_Passable)
        {
            if (!thing.Spawned)
            {
                return(null);
            }
            return(WaterRegionAndRoomQuery.RoomAt(thing.Position, thing.Map, allowedRegionTypes));
        }
示例#2
0
        public bool Allows(TraverseParms tp, bool isDestination)
        {
            if (tp.mode != TraverseMode.PassAllDestroyableThings && tp.mode != TraverseMode.PassAllDestroyableThingsNotWater && !this.type.Passable())
            {
                return(false);
            }
            if (tp.maxDanger < Danger.Deadly && tp.pawn != null)
            {
                Danger danger = this.DangerFor(tp.pawn);
                if (isDestination || danger == Danger.Deadly)
                {
                    WaterRegion region = WaterRegionAndRoomQuery.GetRegion(tp.pawn, RegionType.Set_All);
                    if ((region == null || danger > region.DangerFor(tp.pawn)) && danger > tp.maxDanger)
                    {
                        return(false);
                    }
                }
            }
            switch (tp.mode)
            {
            case TraverseMode.ByPawn:
            {
                if (this.door == null)
                {
                    return(true);
                }
                ByteGrid avoidGrid = tp.pawn.GetAvoidGrid(true);
                if (avoidGrid != null && avoidGrid[this.door.Position] == 255)
                {
                    return(false);
                }
                if (tp.pawn.HostileTo(this.door))
                {
                    return(this.door.CanPhysicallyPass(tp.pawn) || tp.canBash);
                }
                return(this.door.CanPhysicallyPass(tp.pawn) && !this.door.IsForbiddenToPass(tp.pawn));
            }

            case TraverseMode.PassDoors:
                return(true);

            case TraverseMode.NoPassClosedDoors:
                return(this.door == null || this.door.FreePassage);

            case TraverseMode.PassAllDestroyableThings:
                return(true);

            case TraverseMode.NoPassClosedDoorsOrWater:
                return(this.door == null || this.door.FreePassage);

            case TraverseMode.PassAllDestroyableThingsNotWater:
                return(true);

            default:
                throw new NotImplementedException();
            }
        }
        public static WaterRoom RoomAtOrAdjacent(IntVec3 c, Map map, RegionType allowedRegionTypes = RegionType.Set_Passable)
        {
            WaterRoom room = WaterRegionAndRoomQuery.RoomAt(c, map, allowedRegionTypes);

            if (!(room is null))
            {
                return(room);
            }
            for (int i = 0; i < 8; i++)
            {
                IntVec3 c2 = c + GenAdj.AdjacentCells[i];
                room = WaterRegionAndRoomQuery.RoomAt(c2, map, allowedRegionTypes);
                if (!(room is null))
                {
                    return(room);
                }
            }
            return(room);
        }
        public static WaterRoom RoomAt(IntVec3 c, Map map, RegionType allowedRegionTypes = RegionType.Set_Passable)
        {
            WaterRegion region = WaterRegionAndRoomQuery.RegionAt(c, map, allowedRegionTypes);

            return(region is null ? null : region.Room);
        }
示例#5
0
 public static WaterRegion GetRegion(this IntVec3 loc, Map map, RegionType allowedRegionTypes = RegionType.Set_Passable)
 {
     return(WaterRegionAndRoomQuery.RegionAt(loc, map, allowedRegionTypes));
 }