//The same as TileFinder.TryFindNewSiteTile EXCEPT // this one finds locations with caves public static bool TryFindNewSiteTile(out int tile, int minDist = 8, int maxDist = 30, bool allowCaravans = false, bool preferCloserTiles = true, int nearThisTile = -1) { Func <int, int> findTile = delegate(int root) { int minDist2 = minDist; int maxDist2 = maxDist; Predicate <int> validator = (int x) => !Find.WorldObjects.AnyWorldObjectAt(x) && Find.World.HasCaves(x) && TileFinder.IsValidTileForNewSettlement(x, null); bool preferCloserTiles2 = preferCloserTiles; int result; if (TileFinder.TryFindPassableTileWithTraversalDistance(root, minDist2, maxDist2, out result, validator, false, preferCloserTiles2)) { return(result); } return(-1); }; int arg; if (nearThisTile != -1) { arg = nearThisTile; } else if (!TileFinder.TryFindRandomPlayerTile(out arg, allowCaravans, (int x) => findTile(x) != -1)) { tile = -1; return(false); } tile = findTile(arg); return(tile != -1); }
//// Added for testing purposes... //private Site CreateSite(int tile, SitePartDef sitePart, int days, Faction siteFaction, List<Thing> items) //{ // WorldObjectDef woDef; // float chance = Rand.Value; // //if (chance < 0.5f) // // woDef = WorldObjectDefOf.AbandonedFactionBase; // //else // woDef = WorldObjectDefOf.Site; // Site site = (Site)WorldObjectMaker.MakeWorldObject(woDef); // //site.Tile = tile; // site.core = DefDatabase<SiteCoreDef>.GetNamed("Anomaly_ItemStash"); // if (sitePart != null) // site.parts.Add(sitePart); // if (siteFaction != null) // site.SetFaction(siteFaction); // if (days > 0) // site.GetComponent<TimeoutComp>().StartTimeout(days * 60000); // if (items != null && items.Count > 0) // site.GetComponent<ItemStashContentsComp>().contents.TryAddRangeOrTransfer(items); // //Find.WorldObjects.Add(site); // return site; //} // From RimWorld.Planet.TileFinder.TryFindNewSiteTile(..) private bool TryFindNewAnomalyTile(out int tile, int minDist = 7, int maxDist = 27, bool allowCaravans = false, bool preferCloserTiles = true, int nearThisTile = -1) { Func <int, int> findTile = delegate(int root) { int minDist2 = minDist; int maxDist2 = maxDist; Predicate <int> validator = (int x) => !Find.WorldObjects.AnyWorldObjectAt(x) && TileFinder.IsValidTileForNewSettlement(x, null); TileFinderMode preferCloserTiles2 = TileFinderMode.Random; if (preferCloserTiles) { preferCloserTiles2 = TileFinderMode.Near; } int result = default(int); if (TileFinder.TryFindPassableTileWithTraversalDistance(root, minDist2, maxDist2, out result, validator, false, preferCloserTiles2)) { return(result); } return(-1); }; int arg = default(int); if (nearThisTile != -1) { arg = nearThisTile; } else if (!TileFinder.TryFindRandomPlayerTile(out arg, allowCaravans, (Predicate <int>)((int x) => findTile(x) != -1))) { tile = -1; return(false); } tile = findTile(arg); return(tile != -1); }
// From RimWorld.Planet.TileFinder.TryFindNewSiteTile(..) private bool TryFindNewAnomalyTile(out int tile) { int rootTile; if (!TileFinder.TryFindRandomPlayerTile(out rootTile, true)) { tile = -1; return(false); } return(TileFinder.TryFindPassableTileWithTraversalDistance(rootTile, AnomalyDistanceMin, (int)Props.radius, out tile, (int x) => !Find.WorldObjects.AnyWorldObjectAt(x), false)); }
//The same as TileFinder.TryFindNewSiteTile EXCEPT // this one finds locations with caves public static bool TryFindNewSiteTile(out int tile, int minDist = 8, int maxDist = 30, bool allowCaravans = false, bool preferCloserTiles = true, int nearThisTile = -1) { int findTile(int root) { bool validator(int x) { return(!Find.WorldObjects.AnyWorldObjectAt(x) && Find.World.HasCaves(x) && TileFinder.IsValidTileForNewSettlement(x)); } var tileFinderMode = TileFinderMode.Near; if (!preferCloserTiles) { tileFinderMode = TileFinderMode.Furthest; } if (TileFinder.TryFindPassableTileWithTraversalDistance(root, minDist, maxDist, out var result, validator, false, tileFinderMode)) { return(result); } return(-1); } int arg; if (nearThisTile != -1) { arg = nearThisTile; } else if (!TileFinder.TryFindRandomPlayerTile(out arg, allowCaravans, x => findTile(x) != -1)) { tile = -1; return(false); } tile = findTile(arg); return(tile != -1); }
private bool TryFindRootTile(out int tile) { int unused; return(TileFinder.TryFindRandomPlayerTile(out tile, false, (int x) => this.TryFindDestinationTileActual(x, 180, out unused))); }
private bool TryFindRootTile(out int tile) { int tile2; return(TileFinder.TryFindRandomPlayerTile(out tile, allowCaravans: false, (int x) => TryFindDestinationTileActual(x, 180, out tile2))); }