private string UsableNowStatus() { if (!this.AnyCoupleForWhichIsValid()) { StringBuilder stringBuilder = new StringBuilder(); Pair <Pawn, Pawn> pair; if (this.TryFindAnyFiancesCouple(out pair)) { if (!MarriageSpotUtility.IsValidMarriageSpotFor(base.Position, pair.First, pair.Second, stringBuilder)) { return("MarriageSpotNotUsable".Translate(new object[] { stringBuilder })); } } else if (!MarriageSpotUtility.IsValidMarriageSpot(base.Position, base.Map, stringBuilder)) { return("MarriageSpotNotUsable".Translate(new object[] { stringBuilder })); } } return("MarriageSpotUsable".Translate()); }
private bool AnyCoupleForWhichIsValid() { return(base.Map.mapPawns.FreeColonistsSpawned.Any(delegate(Pawn p) { Pawn firstDirectRelationPawn = p.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Fiance, (Pawn x) => x.Spawned); return firstDirectRelationPawn != null && MarriageSpotUtility.IsValidMarriageSpotFor(base.Position, p, firstDirectRelationPawn, null); })); }
public static bool TryFindMarriageSite(Pawn firstFiance, Pawn secondFiance, out IntVec3 result) { if (!firstFiance.CanReach(secondFiance, PathEndMode.ClosestTouch, Danger.Deadly, false, TraverseMode.ByPawn)) { result = IntVec3.Invalid; return(false); } Map map = firstFiance.Map; if ((from x in map.listerBuildings.AllBuildingsColonistOfDef(ThingDefOf.MarriageSpot) where MarriageSpotUtility.IsValidMarriageSpotFor(x.Position, firstFiance, secondFiance, null) select x.Position).TryRandomElement <IntVec3>(out result)) { return(true); } Predicate <IntVec3> noMarriageSpotValidator = delegate(IntVec3 cell) { IntVec3 c = cell + LordToil_MarriageCeremony.OtherFianceNoMarriageSpotCellOffset; if (!c.InBounds(map)) { return(false); } if (!c.IsForbidden(firstFiance) && !c.IsForbidden(secondFiance)) { if (!c.Standable(map)) { return(false); } Room room = cell.GetRoom(map, RegionType.Set_Passable); if (room != null && !room.IsHuge && !room.PsychologicallyOutdoors && room.CellCount < 10) { return(false); } return(true); } return(false); }; foreach (CompGatherSpot item in map.gatherSpotLister.activeSpots.InRandomOrder(null)) { for (int i = 0; i < 10; i++) { IntVec3 intVec = CellFinder.RandomClosewalkCellNear(item.parent.Position, item.parent.Map, 4, null); if (MarriageSpotUtility.IsValidMarriageSpotFor(intVec, firstFiance, secondFiance, null) && noMarriageSpotValidator(intVec)) { result = intVec; return(true); } } } if (CellFinder.TryFindRandomCellNear(firstFiance.Position, firstFiance.Map, 25, (Predicate <IntVec3>)((IntVec3 cell) => MarriageSpotUtility.IsValidMarriageSpotFor(cell, firstFiance, secondFiance, null) && noMarriageSpotValidator(cell)), out result)) { return(true); } result = IntVec3.Invalid; return(false); }
private string UsableNowStatus() { if (!AnyCoupleForWhichIsValid()) { StringBuilder stringBuilder = new StringBuilder(); if (TryFindAnyFiancesCouple(out var fiances)) { if (!MarriageSpotUtility.IsValidMarriageSpotFor(base.Position, fiances.First, fiances.Second, stringBuilder)) { return("MarriageSpotNotUsable".Translate(stringBuilder)); } } else if (!MarriageSpotUtility.IsValidMarriageSpot(base.Position, base.Map, stringBuilder)) { return("MarriageSpotNotUsable".Translate(stringBuilder)); } } return("MarriageSpotUsable".Translate()); }
private bool <AnyCoupleForWhichIsValid> m__0(Pawn p) { Pawn firstDirectRelationPawn = p.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Fiance, (Pawn x) => x.Spawned); return(firstDirectRelationPawn != null && MarriageSpotUtility.IsValidMarriageSpotFor(base.Position, p, firstDirectRelationPawn, null)); }