Exemplo n.º 1
0
        // 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);
        }
Exemplo n.º 3
0
        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);
 }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
            }
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 16
0
 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);
 }
Exemplo n.º 17
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);
 }
Exemplo n.º 18
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;
        }
Exemplo n.º 20
0
        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);
        }
Exemplo n.º 22
0
        // 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));
        }
Exemplo n.º 24
0
 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);
        }
Exemplo n.º 26
0
 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);
 }
Exemplo n.º 27
0
        private static int MoveMapParentSomewhereElse(MapParent oldParent)
        {
            var originalTile = oldParent.Tile;

            oldParent.Tile = TileFinder.RandomStartingTile();
            return(originalTile);
        }
Exemplo n.º 28
0
        //// 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);
        }
Exemplo n.º 29
0
        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);
        }
Exemplo n.º 30
0
        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));
        }