コード例 #1
0
ファイル: Sonar.cs プロジェクト: Blecki/RMUDReboot
        private static void PopulateGrid(MudObject Location, int X, int Y)
        {
            if (X < 0 || X >= MapWidth || Y < 0 || Y >= MapHeight)
            {
                return;
            }
            if (GriddedMap[X, Y] != null)
            {
                return;
            }
            if (Location == null)
            {
                return;
            }
            if (VisitedRooms.Contains(Location))
            {
                return;
            }
            VisitedRooms.Add(Location);
            GriddedMap[X, Y] = Location;

            foreach (var link in Location.EnumerateObjects().Where(t => t.HasProperty("link direction")))
            {
                var destinationName = link.GetProperty <string>("link destination");
                var destination     = Core.GetObject(destinationName);
                var direction       = link.GetProperty <RMUD.Direction>("link direction");
                var vec             = Link.GetAsVector(direction);
                PopulateGrid(destination, X + vec.X, Y + vec.Y);
            }
        }
コード例 #2
0
ファイル: Sonar.cs プロジェクト: Blecki/RMUDReboot
        private static void RenderRoom(MudObject Location, int[,] MapGrid, int X, int Y)
        {
            var symbol = FindSymbol(Location);


            PlaceString(MapGrid, X + 2, Y + 2, symbol);
            PlaceSymbol(MapGrid, X + 1, Y + 1, '+');
            PlaceSymbol(MapGrid, X + RoomWidth - 2, Y + 1, '+');
            PlaceSymbol(MapGrid, X + RoomWidth - 2, Y + RoomHeight - 2, '+');
            PlaceSymbol(MapGrid, X + 1, Y + RoomHeight - 2, '+');
            for (var i = 0; i < RoomWidth - 4; ++i)
            {
                PlaceSymbol(MapGrid, X + 2 + i, Y + 1, '-');
                PlaceSymbol(MapGrid, X + 2 + i, Y + RoomHeight - 2, '-');
            }
            for (var i = 0; i < RoomHeight - 4; ++i)
            {
                PlaceSymbol(MapGrid, X + 1, Y + 2 + i, '|');
                PlaceSymbol(MapGrid, X + RoomWidth - 2, Y + 2 + i, '|');
            }

            if (Location != null)
            {
                var bonusLinks = "";

                foreach (var link in Location.EnumerateObjects().Where(t => t.HasProperty("link direction")))
                {
                    var destinationName = link.GetProperty <string>("link destination");
                    var destination     = Core.GetObject(destinationName);
                    var direction       = link.GetProperty <RMUD.Direction>("link direction");

                    if (Link.IsBonusDirection(direction))
                    {
                        bonusLinks += direction.ToString()[0];
                    }
                    else
                    {
                        var directionVector = RMUD.Link.GetAsVector(direction);
                        PlaceEdge(MapGrid, X, Y, direction);
                    }

                    var bonusSpace = RoomWidth - 4;
                    var bonusRows  = (int)Math.Ceiling((float)bonusLinks.Length / (float)bonusSpace);
                    var bonusY     = Y + RoomHeight - 2 - bonusRows;
                    var bonusX     = 0;
                    for (var i = 0; i < bonusLinks.Length; ++i)
                    {
                        PlaceSymbol(MapGrid, X + 2 + bonusX, bonusY, bonusLinks[i]);
                        bonusX += 1;
                        if (bonusX >= bonusSpace)
                        {
                            bonusX  = 0;
                            bonusY += 1;
                        }
                    }
                }
            }
        }
コード例 #3
0
        private static IEnumerable <MudObject> _enumerateObjectTree(MudObject C)
        {
            if (C != null)
            {
                yield return(C);

                foreach (var item in C.EnumerateObjects())
                {
                    foreach (var sub in _enumerateObjectTree(item))
                    {
                        yield return(sub);
                    }
                }
            }
        }