// Token: 0x06000F0B RID: 3851 RVA: 0x0006F3D4 File Offset: 0x0006D7D4 private bool TryFindTile(out int tile) { var voidSonQuestSiteDistanceRange = new IntRange(5, 13); return(TileFinder.TryFindNewSiteTile(out tile, voidSonQuestSiteDistanceRange.min, voidSonQuestSiteDistanceRange.max)); }
//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); }
public static Faction NewGeneratedFaction(FactionDef facDef) { Faction faction = new Faction(); faction.def = facDef; faction.loadID = Find.UniqueIDsManager.GetNextFactionID(); faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction); if (!facDef.isPlayer) { if (facDef.fixedName != null) { faction.Name = facDef.fixedName; } else { faction.Name = NameGenerator.GenerateName(facDef.factionNameMaker, from fac in Find.FactionManager.AllFactionsVisible select fac.Name, false, null); } } faction.centralMelanin = Rand.Value; foreach (Faction item in Find.FactionManager.AllFactionsListForReading) { faction.TryMakeInitialRelationsWith(item); } if (!facDef.hidden && !facDef.isPlayer) { FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase); factionBase.SetFaction(faction); factionBase.Tile = TileFinder.RandomFactionBaseTileFor(faction, false, null); factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase); Find.WorldObjects.Add(factionBase); } faction.GenerateNewLeader(); return(faction); }
protected override bool TryExecuteWorker(IncidentParms parms) { int tile; if (!TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1)) { return(false); } Faction faction; if (!TryFindFaction(out faction)) { return(false); } Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOf.PrisonSiteLGE); site.Tile = tile; site.core = new SiteCore(SiteDefOf.PrisonCampLGE, SiteDefOf.PrisonCampLGE.Worker.GenerateDefaultParams(site, StorytellerUtility.DefaultSiteThreatPointsNow())); site.SetFaction(faction); ThingSetMakerParams thingMakerparms = default(ThingSetMakerParams); thingMakerparms.totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange); List <Thing> list = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(thingMakerparms); site.GetComponent <PrisonerRescueQuestComp>().StartQuest(faction, 18, list); site.GetComponent <TimeoutComp>().StartTimeout(TimeoutDaysRange.RandomInRange * 60000); Find.WorldObjects.Add(site); Find.LetterStack.ReceiveLetter("LetterLabelPrisonCampLGE".Translate(), "LetterPrisonCampLGE".Translate(faction.Name, GenThing.GetMarketValue(list).ToStringMoney(null), GenLabel.ThingsLabel(list, string.Empty)), LetterDefOf.PositiveEvent, site, null); return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { Faction faction; if (!this.TryFindFaction(out faction)) { return(false); } int tile; if (!TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1)) { return(false); } WorldObject_ResearchRequestLGE researchRequest = (WorldObject_ResearchRequestLGE)WorldObjectMaker.MakeWorldObject(SiteDefOf.ResearchRequestLGE); researchRequest.Tile = tile; researchRequest.SetFaction(faction); researchRequest.GetComponent <TimeoutComp>().StartTimeout(TimeoutDaysRange.RandomInRange * 60000); Find.WorldObjects.Add(researchRequest); string text = string.Format(this.def.letterText.AdjustedFor(faction.leader, "PAWN"), faction.def.leaderTitle, faction.Name, TimeoutDaysRange.RandomInRange).CapitalizeFirst(); Find.LetterStack.ReceiveLetter(this.def.letterLabel, text, this.def.letterDef, researchRequest, null); return(true); }
protected override bool CanDoNext() { bool result; if (!base.CanDoNext()) { result = false; } else { int selectedTile = Find.WorldInterface.SelectedTile; if (selectedTile < 0) { Messages.Message("MustSelectLandingSite".Translate(), MessageTypeDefOf.RejectInput, false); result = false; } else { StringBuilder stringBuilder = new StringBuilder(); if (!TileFinder.IsValidTileForNewSettlement(selectedTile, stringBuilder)) { Messages.Message(stringBuilder.ToString(), MessageTypeDefOf.RejectInput, false); result = false; } else { Tile tile = Find.WorldGrid[selectedTile]; result = TutorSystem.AllowAction("ChooseBiome-" + tile.biome.defName + "-" + tile.hilliness.ToString()); } } } return(result); }
protected override bool CanFireNowSub(IncidentParms parms) { return(base.CanFireNowSub(parms) && TryFindFaction(out faction) && TileFinder.TryFindNewSiteTile(out _, minDist, maxDist) && TryGetRandomAvailableTargetMap(out _) && Find.World.worldObjects.Sites.Count() <= maxSites); }
private void GenerateRoadEndpoints() { List <int> list = (from wo in Find.WorldObjects.AllWorldObjects where Rand.Value > 0.05f select wo.Tile).ToList(); int num = GenMath.RoundRandom((float)Find.WorldGrid.TilesCount / 100000f * ExtraRoadNodesPer100kTiles.RandomInRange); for (int i = 0; i < num; i++) { list.Add(TileFinder.RandomSettlementTileFor(null)); } List <int> list2 = new List <int>(); for (int j = 0; j < list.Count; j++) { int num2 = Mathf.Max(0, RoadDistanceFromSettlement.RandomInRange); int num3 = list[j]; for (int k = 0; k < num2; k++) { Find.WorldGrid.GetTileNeighbors(num3, list2); num3 = list2.RandomElement(); } if (Find.WorldReachability.CanReach(list[j], num3)) { list[j] = num3; } } list = list.Distinct().ToList(); Find.World.genData.roadNodes = list; }
private static void CreateSettlements(Faction faction) { int existingFactions = Find.FactionManager.AllFactionsVisible.Count(); int amount = GenMath.RoundRandom(Find.WorldGrid.TilesCount / 100000f * settlementsPer100KTiles.RandomInRange / existingFactions * Settings.newFactionSettlementFactor); // New factions get less bases amount = Mathf.Max(Settings.minSettlements, amount); int count = 0; for (int k = 0; k < amount; k++) { var tile = TileFinder.RandomSettlementTileFor(faction); if (tile == 0) { continue; } var factionBase = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement); factionBase.SetFaction(faction); factionBase.Tile = tile; factionBase.Name = SettlementNameGenerator.GenerateSettlementName(factionBase); Find.WorldObjects.Add(factionBase); count++; } Log.Message("Created " + count + " settlements for " + faction.def.LabelCap); }
private void DoCustomBottomButtons() { int num; int num1 = (!TutorSystem.TutorialMode ? 5 : 4); num = (num1 < 4 || (float)UI.screenWidth >= 1340f ? 1 : 2); int num2 = Mathf.CeilToInt((float)num1 / (float)num); Vector2 bottomButSize = Page.BottomButSize; float single = bottomButSize.x * (float)num2 + 10f * (float)(num2 + 1); float single1 = (float)num; Vector2 vector2 = Page.BottomButSize; float single2 = single1 * vector2.y + 10f * (float)(num + 1); Rect rect = new Rect(((float)UI.screenWidth - single) / 2f, (float)UI.screenHeight - single2 - 4f, single, single2); if (Find.WindowStack.IsOpen <WorldInspectPane>() && rect.x < InspectPaneUtility.PaneSize.x + 4f) { rect.x = InspectPaneUtility.PaneSize.x + 4f; } Widgets.DrawWindowBackground(rect); float bottomButSize1 = rect.xMin + 10f; float bottomButSize2 = rect.yMin + 10f; Text.Font = GameFont.Small; if (Widgets.ButtonText(new Rect(bottomButSize1, bottomButSize2, Page.BottomButSize.x, Page.BottomButSize.y), "Back".Translate(), true, false, true) && this.CanDoBack()) { this.DoBack(); } bottomButSize1 = bottomButSize1 + (Page.BottomButSize.x + 10f); if (!TutorSystem.TutorialMode) { if (Widgets.ButtonText(new Rect(bottomButSize1, bottomButSize2, Page.BottomButSize.x, Page.BottomButSize.y), "Advanced".Translate(), true, false, true)) { Find.WindowStack.Add(new Dialog_AdvancedGameConfig(Find.WorldInterface.SelectedTile)); } bottomButSize1 = bottomButSize1 + (Page.BottomButSize.x + 10f); } if (Widgets.ButtonText(new Rect(bottomButSize1, bottomButSize2, Page.BottomButSize.x, Page.BottomButSize.y), "SelectRandomSite".Translate(), true, false, true)) { SoundDefOf.Click.PlayOneShotOnCamera(null); Find.WorldInterface.SelectedTile = TileFinder.RandomStartingTile(); Find.WorldCameraDriver.JumpTo(Find.WorldGrid.GetTileCenter(Find.WorldInterface.SelectedTile)); } bottomButSize1 = bottomButSize1 + (Page.BottomButSize.x + 10f); if (num == 2) { bottomButSize1 = rect.xMin + 10f; bottomButSize2 = bottomButSize2 + (Page.BottomButSize.y + 10f); } if (Widgets.ButtonText(new Rect(bottomButSize1, bottomButSize2, Page.BottomButSize.x, Page.BottomButSize.y), "WorldFactionsTab".Translate(), true, false, true)) { Find.WindowStack.Add(new Dialog_FactionDuringLanding()); } bottomButSize1 = bottomButSize1 + (Page.BottomButSize.x + 10f); if (Widgets.ButtonText(new Rect(bottomButSize1, bottomButSize2, Page.BottomButSize.x, Page.BottomButSize.y), "Next".Translate(), true, false, true) && this.CanDoNext()) { this.DoNext(); } bottomButSize1 = bottomButSize1 + (Page.BottomButSize.x + 10f); GenUI.AbsorbClicksInRect(rect); }
public static void GenerateFactionsIntoWorld() { int i = 0; foreach (FactionDef allDef in DefDatabase <FactionDef> .AllDefs) { for (int j = 0; j < allDef.requiredCountAtGameStart; j++) { Faction faction = NewGeneratedFaction(allDef); Find.FactionManager.Add(faction); if (!faction.Hidden) { i++; } } } for (; i < 5; i++) { Faction faction2 = NewGeneratedFaction(DefDatabase <FactionDef> .AllDefs.Where((FactionDef fa) => fa.canMakeRandomly && Find.FactionManager.AllFactions.Count((Faction f) => f.def == fa) < fa.maxCountAtGameStart).RandomElement()); Find.World.factionManager.Add(faction2); } int num = GenMath.RoundRandom((float)Find.WorldGrid.TilesCount / 100000f * SettlementsPer100kTiles.RandomInRange * Find.World.info.overallPopulation.GetScaleFactor()); num -= Find.WorldObjects.Settlements.Count; for (int k = 0; k < num; k++) { Faction faction3 = Find.World.factionManager.AllFactionsListForReading.Where((Faction x) => !x.def.isPlayer && !x.Hidden && !x.temporary).RandomElementByWeight((Faction x) => x.def.settlementGenerationWeight); Settlement settlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement); settlement.SetFaction(faction3); settlement.Tile = TileFinder.RandomSettlementTileFor(faction3); settlement.Name = SettlementNameGenerator.GenerateSettlementName(settlement); Find.WorldObjects.Add(settlement); } }
protected override bool CanDoNext() { if (!base.CanDoNext()) { return(false); } int selectedTile = Find.WorldInterface.SelectedTile; if (selectedTile < 0) { Messages.Message("MustSelectLandingSite".Translate(), MessageSound.RejectInput); return(false); } StringBuilder stringBuilder = new StringBuilder(); if (!TileFinder.IsValidTileForNewSettlement(selectedTile, stringBuilder)) { Messages.Message(stringBuilder.ToString(), MessageSound.RejectInput); return(false); } Tile item = Find.WorldGrid[selectedTile]; if (!TutorSystem.AllowAction(string.Concat("ChooseBiome-", item.biome.defName, "-", item.hilliness.ToString()))) { return(false); } return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { int num = this.worldObject.Tile; if (num == -1) { if (!TileFinder.TryFindNewSiteTile(out num, 7, 27, false, true, -1)) { num = -1; } } else if (Find.WorldObjects.AnyWorldObjectAt(num)) { if (!TileFinder.TryFindPassableTileWithTraversalDistance(num, 1, 50, out num, (int x) => !Find.WorldObjects.AnyWorldObjectAt(x), false, true, false)) { num = -1; } } if (num != -1) { this.worldObject.Tile = num; Find.WorldObjects.Add(this.worldObject); this.spawned = true; } return(this.spawned); }
private void GenerateFactions() { if (regenerate) { RemoveAllFactions(); } for (int i = 0; i < FactionToGenerate; i++) { FactionDef facDef = (from fa in DefDatabase <FactionDef> .AllDefs where fa.canMakeRandomly && !fa.hidden && !fa.isPlayer select fa).RandomElement(); Faction faction = NewGeneratedFaction(facDef); Find.FactionManager.Add(faction); } int num = GenMath.RoundRandom((float)Find.WorldGrid.TilesCount / 100000f * SettlementsPer100kTiles.RandomInRange); num -= Find.WorldObjects.Settlements.Count; for (int k = 0; k < num; k++) { Faction faction3 = (from x in Find.World.factionManager.AllFactionsListForReading where !x.def.isPlayer && !x.def.hidden select x).RandomElementByWeight((Faction x) => x.def.settlementGenerationWeight); Settlement settlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement); settlement.SetFaction(faction3); settlement.Tile = TileFinder.RandomSettlementTileFor(faction3); settlement.Name = SettlementNameGenerator.GenerateSettlementName(settlement); Find.WorldObjects.Add(settlement); } }
protected override bool TryExecuteWorker(IncidentParms parms) { Faction faction; Faction faction2; if (!this.TryFindFactions(out faction, out faction2)) { return(false); } int tile; if (!TileFinder.TryFindNewSiteTile(out tile, 8, 30, false, true, -1)) { return(false); } Site site = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, SitePartDefOf.Outpost, faction2); site.Tile = tile; List <Thing> list = this.GenerateRewards(faction); site.GetComponent <DefeatAllEnemiesQuestComp>().StartQuest(faction, 8f, list); Find.WorldObjects.Add(site); base.SendStandardLetter(site, new string[] { faction.leader.LabelShort, faction.def.leaderTitle, faction.Name, list[0].LabelCap }); return(true); }
public static int RandomSettlementTileFor_HillDwarves(Faction faction, bool mustBeAutoChoosable = false) { for (int i = 0; i < 500; i++) { int num; if ((from _ in Enumerable.Range(0, 100) select Rand.Range(0, Find.WorldGrid.TilesCount)).TryRandomElementByWeight(delegate(int x) { Tile tile = Find.WorldGrid[x]; if (!tile.biome.canBuildBase || tile.hilliness == Hilliness.Impassable) { return(0f); } List <int> neighbors = new List <int>(); if (tile.hilliness == Hilliness.LargeHills) { return(1000f); } return(0f); //tile.biome.settlementSelectionWeight; }, out num)) { if (TileFinder.IsValidTileForNewSettlement(num, null)) { return(num); } } } Log.Error("Failed to find faction base tile for " + faction); return(0); }
public static int RandomSettlementTileFor(FactionDefExtension options, Faction faction, bool mustBeAutoChoosable = false, Predicate <int> extraValidator = null) { for (int i = 0; i < 500; i++) { if ((from _ in Enumerable.Range(0, 100) select Rand.Range(0, Find.WorldGrid.TilesCount)).TryRandomElementByWeight(delegate(int x) { Tile tile = Find.WorldGrid[x]; if (options.disallowedBiomes != null && options.disallowedBiomes.Contains(tile.biome)) { return(0f); } if (options.allowedBiomes != null && !options.allowedBiomes.Contains(tile.biome)) { return(0f); } if (!tile.biome.canBuildBase || !tile.biome.implemented || tile.hilliness == Hilliness.Impassable) { return(0f); } if (mustBeAutoChoosable && !tile.biome.canAutoChoose) { return(0f); } return((extraValidator != null && !extraValidator(x)) ? 0f : tile.biome.settlementSelectionWeight); }, out int result) && TileFinder.IsValidTileForNewSettlement(result)) { return(result); } } Log.Error("Failed to find faction base tile for " + faction); return(0); }
protected override bool CanDoNext() { if (!base.CanDoNext()) { return(false); } int selectedTile = Find.WorldInterface.SelectedTile; if (selectedTile < 0) { Messages.Message("MustSelectStartingSite".TranslateWithBackup("MustSelectLandingSite"), MessageTypeDefOf.RejectInput, historical: false); return(false); } StringBuilder stringBuilder = new StringBuilder(); if (!TileFinder.IsValidTileForNewSettlement(selectedTile, stringBuilder)) { Messages.Message(stringBuilder.ToString(), MessageTypeDefOf.RejectInput, historical: false); return(false); } Tile tile = Find.WorldGrid[selectedTile]; if (!TutorSystem.AllowAction("ChooseBiome-" + tile.biome.defName + "-" + tile.hilliness.ToString())) { return(false); } return(true); }
public static void Postfix() { if (!WorldGenerator_GenerateFromScribe.IsGeneratingWorld) { return; } // tell tile finder to use our data - this is done before we can re-obtain settlement tiles TileFinder_RandomSettlementTileFor.FirstSettlementLocations = WorldGenerator_GenerateFromScribe.FirstSettlementLocation; TileFinder_IsValidTileForNewSettlement.FirstSettlementLocations = WorldGenerator_GenerateFromScribe.FirstSettlementLocation; TileFinder_IsValidTileForNewSettlement.FDs = WorldGenerator_GenerateFromScribe.FDs; // set 'first' settlements foreach (var s in Find.WorldObjects.Settlements) { if (!WorldGenerator_GenerateFromScribe.AddedSettlements.Contains(s) && s.Faction != null && s.Faction.Name != null && !WorldGenerator_GenerateFromScribe.FirstSettlementLocation.ContainsKey(s.Faction.Name)) { WorldGenerator_GenerateFromScribe.FirstSettlementLocation[s.Faction.Name] = s.Tile; } } // now randomize settlement positions based on mod logic foreach (var s in WorldGenerator_GenerateFromScribe.AddedSettlements) { s.Tile = s.Faction != null?TileFinder.RandomSettlementTileFor(s.Faction) : TileFinder.RandomStartingTile(); } // now we can clear stuff we won't use until a save is loaded the next time WorldGenerator_GenerateFromScribe.AddedSettlements.Clear(); WorldGenerator_GenerateFromScribe.IsGeneratingWorld = false; }
public override void Notify_QuestSignalReceived(Signal signal) { base.Notify_QuestSignalReceived(signal); if (!(signal.tag == inSignal) || spawned) { return; } int tile = worldObject.Tile; if (tile == -1) { if (!TileFinder.TryFindNewSiteTile(out tile)) { tile = -1; } } else if (Find.WorldObjects.AnyWorldObjectAt(tile) && !TileFinder.TryFindPassableTileWithTraversalDistance(tile, 1, 50, out tile, (int x) => !Find.WorldObjects.AnyWorldObjectAt(x), ignoreFirstTilePassability: false, preferCloserTiles: true)) { tile = -1; } if (tile != -1) { worldObject.Tile = tile; Find.WorldObjects.Add(worldObject); spawned = true; } }
protected override bool TryExecuteWorker(IncidentParms parms) { int contingency = 0; bool tileFound = false; int tile = -1; while (contingency < 99 && !tileFound) { TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1); if (Find.WorldGrid[tile].temperature > 0f && Find.WorldGrid[tile].hilliness != Hilliness.Mountainous) { tileFound = true; } contingency++; } if (!tileFound || tile == -1) { return(false); } Site site = SiteMaker.MakeSite(SiteDefOf.AmbrosiaAnimalsLGE, sitePart: null, tile: tile, faction: Faction.OfAncients); site.GetComponent <TimeoutComp>().StartTimeout(TimeoutDaysRange.RandomInRange * 60000); Find.WorldObjects.Add(site); Find.LetterStack.ReceiveLetter("LetterLabelAmbrosiaAnimalsLGE".Translate(), "LetterAmbrosiaAnimalsLGE".Translate(), LetterDefOf.PositiveEvent, site, null); return(true); }
// Token: 0x06000DA9 RID: 3497 RVA: 0x000648C0 File Offset: 0x00062CC0 protected override bool TryExecuteWorker(IncidentParms parms) { Faction faction; Faction faction2; if (!this.TryFindFactions(out faction, out faction2)) { return(false); } int tile; if (!TileFinder.TryFindNewSiteTile(out tile, 8, 30, false, true, -1)) { return(false); } Site site = SiteMaker.MakeSite(SiteCoreDefOf.DownedT5Android, SitePartDefOf.Turrets, faction2); site.Tile = tile; int randomInRange = IncidentWorker_DownedT5Android.TimeoutDaysRange.RandomInRange; site.GetComponent <TimeoutComp>().StartTimeout(randomInRange * 60000); Find.WorldObjects.Add(site); base.SendStandardLetter(site, new string[] { faction.leader.LabelShort, faction.def.leaderTitle, faction.Name, }); return(true); }
protected override bool CanFireNowSub(IncidentParms parms) { int tile; Faction faction; return(base.CanFireNowSub(parms) && this.TryFindFaction(out faction) && TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1)); }
protected override bool CanFireNowSub(IncidentParms parms) { return(base.CanFireNowSub(parms: parms) && TryFindFaction(enemyFaction: out this.faction) && TileFinder.TryFindNewSiteTile(tile: out int tile, minDist, maxDist) && this.TryGetRandomAvailableTargetMap(out Map map) && Find.World.worldObjects.Sites.Count() <= maxSites); }
protected override bool TryExecuteWorker(IncidentParms parms) { int tile; if (!TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1)) { return(false); } if (Rand.Chance(0.33f)) { Site site = CreateBombardmentCitySite(tile, TimeoutDaysRange.RandomInRange); Find.LetterStack.ReceiveLetter("LetterLabelStandartLostCityLGE".Translate(), "LetterStandartLostCityLGE".Translate(), LetterDefOf.PositiveEvent, site, null); } else { if (Rand.Chance(0.5f)) { Site site = CreateInfestedCitySite(tile, TimeoutDaysRange.RandomInRange); Find.LetterStack.ReceiveLetter("LetterLabelInfestedLostCityLGE".Translate(), "LetterInfestedLostCityLGE".Translate(), LetterDefOf.PositiveEvent, site, null); } else { Site site = CreateToxicCitySite(tile, TimeoutDaysRange.RandomInRange); Find.LetterStack.ReceiveLetter("LetterLabelToxicLostCityLGE".Translate(), "LetterToxicLostCityLGE".Translate(), LetterDefOf.PositiveEvent, site, null); } } return(true); }
private void Start() { benchmarkPos = tileHandler.squareInstances[4].tile.transform.position; tileFinder = tileFinderObj.GetComponent <TileFinder>(); inven = MyFunc.GetObject(MyFunc.ObjType.INVENTORY).GetComponent <Inventory>(); unit = inven.FindChampFromInstance(unitObj); }
private static int MoveMapParentSomewhereElse(MapParent oldParent) { var originalTile = oldParent.Tile; oldParent.Tile = TileFinder.RandomStartingTile(); return(originalTile); }
//// 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); }
public static Command_Action SetUpCampCommand(Caravan caravan) { Command_Action command_Action = new Command_Action { defaultLabel = "SetUpCamp".Translate(), defaultDesc = "SetUpCampDesc".Translate(), icon = SetUpCampCommandTex, action = delegate() { SoundStarter.PlayOneShotOnCamera(SoundDefOf.Tick_High, null); Camp(caravan); } }; tmpSettleFailReason.Length = 0; if (!TileFinder.IsValidTileForNewSettlement(caravan.Tile, tmpSettleFailReason)) { command_Action.Disable(tmpSettleFailReason.ToString()); } if (Find.WorldObjects.AnyWorldObjectOfDefAt(SetUpCampDefOf.AbandonedCamp, caravan.Tile)) { command_Action.Disable("SetUpCampOccupied".Translate()); } return(command_Action); }
private bool TryFindTile(Slate slate, out int tile) { int nearThisTile = (slate.Get <Map>("map") ?? Find.RandomPlayerHomeMap)?.Tile ?? (-1); int num = int.MaxValue; bool?value = clampRangeBySiteParts.GetValue(slate); if (value.HasValue && value.Value) { foreach (SitePartDef item in sitePartDefs.GetValue(slate)) { if (item.conditionCauserDef != null) { num = Mathf.Min(num, item.conditionCauserDef.GetCompProperties <CompProperties_CausesGameCondition>().worldRange); } } } if (!slate.TryGet <IntRange>("siteDistRange", out var var)) { var = new IntRange(7, Mathf.Min(27, num)); } else if (num != int.MaxValue) { var = new IntRange(Mathf.Min(var.min, num), Mathf.Min(var.max, num)); } return(TileFinder.TryFindNewSiteTile(out tile, var.min, var.max, allowCaravans.GetValue(slate), preferCloserTiles.GetValue(slate), nearThisTile)); }