예제 #1
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);
        }
예제 #2
0
        public static void BeginArenaFight(List <PawnKindDef> lhs, List <PawnKindDef> rhs, Action <ArenaUtility.ArenaResult> callback)
        {
            MapParent mapParent = (MapParent)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Debug_Arena);

            mapParent.Tile = TileFinder.RandomFactionBaseTileFor(Faction.OfPlayer, true, (int tile) => lhs.Concat(rhs).Any((PawnKindDef pawnkind) => Find.World.tileTemperatures.SeasonAndOutdoorTemperatureAcceptableFor(tile, pawnkind.race)));
            mapParent.SetFaction(Faction.OfPlayer);
            Find.WorldObjects.Add(mapParent);
            Map     orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, new IntVec3(50, 1, 50), null);
            IntVec3 spot;
            IntVec3 spot2;

            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(orGenerateMap, out spot, out spot2);
            List <Pawn> lhs2      = ArenaUtility.SpawnPawnSet(orGenerateMap, lhs, spot, Faction.OfSpacer);
            List <Pawn> rhs2      = ArenaUtility.SpawnPawnSet(orGenerateMap, rhs, spot2, Faction.OfSpacerHostile);
            DebugArena  component = mapParent.GetComponent <DebugArena>();

            component.lhs      = lhs2;
            component.rhs      = rhs2;
            component.callback = callback;
        }
예제 #3
0
        public static void GenerateFactionsIntoWorld()
        {
            int i = 0;

            foreach (FactionDef current in DefDatabase <FactionDef> .AllDefs)
            {
                for (int j = 0; j < current.requiredCountAtGameStart; j++)
                {
                    Faction faction = FactionGenerator.NewGeneratedFaction(current);
                    Find.FactionManager.Add(faction);
                    if (!current.hidden)
                    {
                        i++;
                    }
                }
            }
            while (i < 5)
            {
                FactionDef facDef = (from fa in DefDatabase <FactionDef> .AllDefs
                                     where fa.canMakeRandomly && Find.FactionManager.AllFactions.Count((Faction f) => f.def == fa) < fa.maxCountAtGameStart
                                     select fa).RandomElement <FactionDef>();
                Faction faction2 = FactionGenerator.NewGeneratedFaction(facDef);
                Find.World.factionManager.Add(faction2);
                i++;
            }
            int num = GenMath.RoundRandom((float)Find.WorldGrid.TilesCount / 100000f * FactionGenerator.FactionBasesPer100kTiles.RandomInRange);

            num -= Find.WorldObjects.FactionBases.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.baseSelectionWeight);
                FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase);
                factionBase.SetFaction(faction3);
                factionBase.Tile = TileFinder.RandomFactionBaseTileFor(faction3, false, null);
                factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase);
                Find.WorldObjects.Add(factionBase);
            }
        }
예제 #4
0
        public override void GenerateFresh(string seed)
        {
            var faction = FactionUtility.DefaultFactionFrom(DefDatabase <FactionDef> .GetNamed("Capital"));

            Initialize();
            // Setup capital center
            var capitalCenter = WorldObjectMaker.MakeWorldObject(_centerDef);

            capitalCenter.Tile = TileFinder.RandomFactionBaseTileFor(null);
            _capitalWorldObjs.Add(capitalCenter);

            MapSurroundings(capitalCenter.Tile);

            GenerateDowntown();
            GenerateCapitalCore();
            GenerateCapitalOuterRim();

            // Place into the world
            foreach (var worldObj in _capitalWorldObjs)
            {
                worldObj.SetFaction(faction);
                Find.World.worldObjects.Add(worldObj);
            }
        }