Example #1
0
        protected internal virtual void PaintGrass()
        {
            var grass = Grass();

            if (feeling == Feeling.GRASS)
            {
                foreach (var room in Rooms.Where(room => room.type != RoomType.NULL && room.type != RoomType.PASSAGE && room.type != RoomType.TUNNEL))
                {
                    grass[(room.Left + 1) + (room.Top + 1) * Width]     = true;
                    grass[(room.Right - 1) + (room.Top + 1) * Width]    = true;
                    grass[(room.Left + 1) + (room.Bottom - 1) * Width]  = true;
                    grass[(room.Right - 1) + (room.Bottom - 1) * Width] = true;
                }
            }

            for (var i = Width + 1; i < Length - Width - 1; i++)
            {
                if (map[i] != Terrain.EMPTY || !grass[i])
                {
                    continue;
                }

                var count = 1 + NEIGHBOURS8.Count(n => grass[i + n]);
                map[i] = (Random.Float() < count / 12f) ? Terrain.HIGH_GRASS : Terrain.GRASS;
            }
        }
Example #2
0
        protected internal override void Decorate()
        {
            for (var i = Width + 1; i < Length - Width - 1; i++)
            {
                switch (map[i])
                {
                case Terrain.EMPTY:
                {
                    var count = NEIGHBOURS8.Count(neighbour => (Terrain.Flags[map[i + neighbour]] & Terrain.PASSABLE) > 0);

                    if (pdsharp.utils.Random.Int(80) < count)
                    {
                        map[i] = Terrain.EMPTY_DECO;
                    }
                }
                break;

                case Terrain.WALL:
                {
                    var count = NEIGHBOURS4.Count(neighbour => map[i + neighbour] == Terrain.WATER);

                    if (pdsharp.utils.Random.Int(4) < count)
                    {
                        map[i] = Terrain.WALL_DECO;
                    }
                }
                break;
                }
            }

            while (true)
            {
                var pos = RoomEntrance.Random();

                if (pos == entrance)
                {
                    continue;
                }

                map[pos] = Terrain.SIGN;
                break;
            }
        }