Ejemplo n.º 1
0
        protected override void ScatterAt(IntVec3 pos, Map map, GenStepParams parms, int count)
        {
            var terrain = sidewalkTerrains.RandomElement();

            var s = new Stencil(map).MoveTo(pos).RotateRand();

            if (IsValidTile(map, s.pos))
            {
                s.SetTerrain(terrain);
            }

            var s1 = s.Move(0, 1);

            while (s1.Check(s1.pos, IsValidTile))
            {
                s1.SetTerrain(terrain);
                s1 = s1.Move(0, 1);
            }

            var s2 = s.Move(0, -1);

            while (s2.Check(s2.pos, IsValidTile))
            {
                s2.SetTerrain(terrain);
                s2 = s2.Move(0, -1);
            }
        }
Ejemplo n.º 2
0
        void GenMainRoad(Stencil s, TerrainDef roadTerrain, TerrainDef divTerrain, TerrainDef sidewalkTerrain)
        {
            s.Bound(-3, 0, 3, s.MaxZ)
            .BorderTerrain(sidewalkTerrain, (m, p) => IsValidSidewalkTerrain(p.GetTerrain(m)));
            s.Bound(-2, 0, 2, s.MaxZ)
            .ClearThingsInBounds()
            .FillTerrain(roadTerrain);
            var s1 = s;

            s.Bound(-4, 0, 4, s.MaxZ)
            .BorderTerrain(TerrainUtility.Bridge, (m, p) => p.GetTerrain(m).IsWater);
            s.FillTerrain(0, 0, 0, s.MaxZ, divTerrain);
            s = s.Move(0, roadSpacing.RandomInRange);
            while (s.Expand(-2).IsInBounds())
            {
                if (s.Chance(roadChance))
                {
                    GenSideRoad(s.Left().Move(0, 3), roadTerrain, sidewalkTerrain);
                }

                if (s.Chance(roadChance))
                {
                    GenSideRoad(s.Right().Move(0, 3), roadTerrain, sidewalkTerrain);
                }

                s = s.Move(0, roadSpacing.RandomInRange);
            }
        }