コード例 #1
0
        private TurboNoise GeneratePerlinNoiseForCaves(Map map)
        {
            var noiseToOutput = new TurboNoise();

            noiseToOutput.addLayer(map.GetHashCode(), 2.0, 0.1);

            Log.Message("Horrors: Generating Hive Perlin Noise");

            return(noiseToOutput);
        }
コード例 #2
0
        protected override void ScatterAt(IntVec3 c, Map map, GenStepParams parms, int stackCount = 1)
        {
            Log.Message("Horrors: Initiating Hive Spawn");
            TurboNoise caveNoise = new TurboNoise();

            double[ , ] noiseArray = new double[map.Size.x, map.Size.z];

            caveNoise = GeneratePerlinNoiseForCaves(map);
            Log.Message("Horrors: Noise Generated Successfully");

            Log.Message("Horrors: Stepping through noise grid");
            for (int i = 0; i < map.Size.x; i++)
            {
                for (int n = 0; n < map.Size.z; n++)
                {
                    noiseArray[i, n] = caveNoise.layeredNoise(Convert.ToDouble(i) / 10, Convert.ToDouble(n) / 10);
                }
            }

            Log.Message("Horrors: Digging out tunnels");
            for (int i = 0; i < map.Size.x; i++)
            {
                for (int n = 0; n < map.Size.z; n++)
                {
                    IntVec3 loc = new IntVec3(i, 0, n);

                    if (CoverUtility.TotalSurroundingCoverScore(loc, map) > 0.2)
                    {
                        GenSpawn.Spawn(ThingDef.Named("HorrorWeb"), loc, map);
                    }

                    if (noiseArray[i, n] > 0.5)
                    {
                        if (GridsUtility.GetEdifice(loc, map) != null)
                        {
                            GridsUtility.GetEdifice(loc, map).Destroy(DestroyMode.KillFinalize);
                        }

                        if (map.fogGrid.IsFogged(loc))
                        {
                            map.fogGrid.Unfog(loc);
                        }

                        //map.terrainGrid.SetTerrain(loc, TerrainDef.Named("FloorWebs"));
                    }
                }
            }

            Log.Message("Horrors: Generating Hive Rect");
            int      randomInRange  = GenStep_HorrorsHive.FactionBaseSizeRange.RandomInRange;
            int      randomInRange2 = GenStep_HorrorsHive.FactionBaseSizeRange.RandomInRange;
            CellRect rect           = new CellRect(0, 0, 0, 0);
            Faction  faction;

            if (map.info.parent == null || map.info.parent.Faction == null || map.info.parent.Faction == Faction.OfPlayer)
            {
                faction = Find.FactionManager.RandomEnemyFaction(false, false);
            }
            else
            {
                faction = map.info.parent.Faction;
            }

            rect = rect.ExpandedBy(4);

            rect.ClipInsideMap(map);
            ResolveParams resolveParams = default(ResolveParams);

            resolveParams.rect         = rect;
            resolveParams.faction      = faction;
            BaseGen.globalSettings.map = map;

            Log.Message("Horrors: Validating Spawns");

            Predicate <IntVec3> validator = (IntVec3 p) => DropCellFinder.IsGoodDropSpot(p, map, true, true);
            IntVec3             cellReturned;

            // Pawns
            Pawn pawnToSpawn = PawnGenerator.GeneratePawn(PawnKindDef.Named("Pirate"), faction);
            Pawn queenPawn   = PawnGenerator.GeneratePawn(PawnKindDef.Named("Pirate"), faction);


            Log.Message("Horrors: Spawning Sinkhole");
            CellFinder.TryFindRandomCellNear(map.Center, map, 20, validator, out cellReturned);
            GenSpawn.Spawn(ThingDef.Named("SinkHole"), map.Center, map);

            Log.Message("Horrors: Spawning Sinkhole");
            CellFinder.TryFindRandomCellNear(map.Center, map, 20, validator, out cellReturned);
            GenSpawn.Spawn(ThingDef.Named("SinkHole"), cellReturned, map);

            Log.Message("Horrors: Spawning Sinkhole");
            CellFinder.TryFindRandomCellNear(map.Center, map, 20, validator, out cellReturned);
            GenSpawn.Spawn(ThingDef.Named("SinkHole"), cellReturned, map);

            Log.Message("Horrors: Spawning Sinkhole");
            CellFinder.TryFindRandomCellNear(map.Center, map, 20, validator, out cellReturned);
            GenSpawn.Spawn(ThingDef.Named("SinkHole"), cellReturned, map);

            Log.Message("Horrors: Spawning Sinkhole");
            CellFinder.TryFindRandomCellNear(map.Center, map, 20, validator, out cellReturned);

            Thing queen = GenSpawn.Spawn(queenPawn, cellReturned, map);

            pawnToSpawn = PawnGenerator.GeneratePawn(PawnKindDef.Named("BroodLord"), faction);

            GenSpawn.Spawn(pawnToSpawn, cellReturned, map);
            pawnToSpawn.training.Train(TrainableDefOf.Obedience, (Pawn)queen);
        }