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); } }
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; } } } } }
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); } } } }