//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)); }
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); }
public static WaterRegion GetRegion(this IntVec3 loc, Map map, RegionType allowedRegionTypes = RegionType.Set_Passable) { return(WaterRegionAndRoomQuery.RegionAt(loc, map, allowedRegionTypes)); }