Esempio n. 1
0
        //We have to render our pathway out, an empty space for the potential pathway back and the destination room
        private static long[,,] AddDirectionToMap(long[,,] dataMap, MovementDirectionType transversalDirection, IRoomTemplate origin, int diameter, int centerX, int centerY, int centerZ, HashSet <IRoomTemplate> roomPool)
        {
            IEnumerable <IPathwayTemplate> pathways         = origin.GetPathways(true);
            Tuple <int, int, int>          directionalSteps = Utilities.GetDirectionStep(transversalDirection);

            int xStepped = centerX + directionalSteps.Item1;
            int yStepped = centerY + directionalSteps.Item2;
            int zStepped = centerZ + directionalSteps.Item3;

            //If we're not over diameter budget and there is nothing there already (we might have already rendered the path and room) then render it
            //When the next room tries to render backwards it'll run into the existant path it came from and stop the chain here
            if (xStepped > 0 && xStepped <= diameter &&
                yStepped > 0 && yStepped <= diameter &&
                zStepped > 0 && zStepped <= diameter &&
                dataMap[xStepped - 1, yStepped - 1, zStepped - 1] < 0)
            {
                IPathwayTemplate thisPath = pathways.FirstOrDefault(path =>
                                                                    (path.DirectionType == transversalDirection && path.Origin.Equals(origin) && path.Destination.EntityClass.GetInterfaces().Contains(typeof(IRoom))) ||
                                                                    (path.DirectionType == Utilities.ReverseDirection(transversalDirection) && path.Destination.Equals(origin) && path.Origin.EntityClass.GetInterfaces().Contains(typeof(IRoom)))
                                                                    );
                if (thisPath != null)
                {
                    long locId = thisPath.Destination.Id;

                    if (thisPath.Destination.Id.Equals(origin.Id))
                    {
                        locId = thisPath.Origin.Id;
                    }

                    IRoomTemplate passdownOrigin = TemplateCache.Get <IRoomTemplate>(locId);

                    if (passdownOrigin != null)
                    {
                        dataMap[xStepped - 1, yStepped - 1, zStepped - 1] = passdownOrigin.Id;
                        dataMap = AddFullRoomToMap(dataMap, passdownOrigin, diameter, xStepped, yStepped, zStepped, roomPool);
                    }
                }
            }

            return(dataMap);
        }
Esempio n. 2
0
        private static string RenderRoomToAscii(IRoomTemplate destination, bool hasZoneExits, bool hasLocaleExits, bool isCurrentLocation, bool forAdmin = false)
        {
            MovementDirectionType[] upPaths = new MovementDirectionType[] {
                MovementDirectionType.Up,
                MovementDirectionType.UpEast,
                MovementDirectionType.UpNorth,
                MovementDirectionType.UpNorthEast,
                MovementDirectionType.UpNorthWest,
                MovementDirectionType.UpSouth,
                MovementDirectionType.UpSouthEast,
                MovementDirectionType.UpSouthWest,
                MovementDirectionType.UpWest
            };

            MovementDirectionType[] downPaths = new MovementDirectionType[] {
                MovementDirectionType.Down,
                MovementDirectionType.DownEast,
                MovementDirectionType.DownNorth,
                MovementDirectionType.DownNorthEast,
                MovementDirectionType.DownNorthWest,
                MovementDirectionType.DownSouth,
                MovementDirectionType.DownSouthEast,
                MovementDirectionType.DownSouthWest,
                MovementDirectionType.DownWest
            };

            bool   hasUp      = destination.GetPathways().Any(path => upPaths.Contains(path.DirectionType));
            bool   hasDown    = destination.GetPathways().Any(path => downPaths.Contains(path.DirectionType));
            string extraClass = "";

            string character = "O";

            if (forAdmin)
            {
                if (hasZoneExits && hasLocaleExits)
                {
                    character = "$";
                }
                else if (hasZoneExits)
                {
                    character = "Z";
                }
                else if (hasLocaleExits)
                {
                    character = "L";
                }
            }
            else
            {
                if (isCurrentLocation)
                {
                    character  = "@";
                    extraClass = "isHere";
                }
                else if (hasUp)
                {
                    if (hasDown)
                    {
                        character = "X";
                    }
                    else
                    {
                        character = "A";
                    }
                }
                else if (hasDown)
                {
                    character = "V";
                }
            }

            if (forAdmin)
            {
                return(string.Format("<a href='#' class='editData AdminEditRoom' roomId='{0}' title='Edit - {2}'>{1}</a>", destination.Id, character, destination.Name));
            }
            else
            {
                return(string.Format("<a href='#' class='room nonAdminRoom {3}' title='{1}{2}'>{0}</a>", character, destination.Name, destination.Id, extraClass));
            }
        }
Esempio n. 3
0
        private static string[,] RenderRoomAndPathwaysForMapNode(int x, int y, IRoomTemplate RoomTemplate, IRoomTemplate centerRoom, string[,] expandedMap, bool currentRoom, bool forAdmin, MapRenderMode renderMode)
        {
            IEnumerable <IPathwayTemplate> pathways = RoomTemplate.GetPathways();
            int expandedRoomX = x * 3 + 1;
            int expandedRoomY = y * 3 + 1;

            switch (renderMode)
            {
            case MapRenderMode.Normal:
                IPathwayTemplate ePath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.East);
                IPathwayTemplate nPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.North);
                IPathwayTemplate nePath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.NorthEast);
                IPathwayTemplate nwPath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.NorthWest);
                IPathwayTemplate sPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.South);
                IPathwayTemplate sePath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.SouthEast);
                IPathwayTemplate swPath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.SouthWest);
                IPathwayTemplate wPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.West);

                //The room
                expandedMap[expandedRoomX, expandedRoomY] = RenderRoomToAscii(RoomTemplate, RoomTemplate.GetZonePathways().Any(), RoomTemplate.GetLocalePathways().Any()
                                                                              , !forAdmin && currentRoom, forAdmin);

                expandedMap[expandedRoomX - 1, expandedRoomY + 1] = RenderPathwayToAsciiForModals(nwPath, RoomTemplate.Id, MovementDirectionType.NorthWest, forAdmin);
                expandedMap[expandedRoomX, expandedRoomY + 1]     = RenderPathwayToAsciiForModals(nPath, RoomTemplate.Id, MovementDirectionType.North, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY + 1] = RenderPathwayToAsciiForModals(nePath, RoomTemplate.Id, MovementDirectionType.NorthEast, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY]     = RenderPathwayToAsciiForModals(wPath, RoomTemplate.Id, MovementDirectionType.West, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY]     = RenderPathwayToAsciiForModals(ePath, RoomTemplate.Id, MovementDirectionType.East, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY - 1] = RenderPathwayToAsciiForModals(swPath, RoomTemplate.Id, MovementDirectionType.SouthWest, forAdmin);
                expandedMap[expandedRoomX, expandedRoomY - 1]     = RenderPathwayToAsciiForModals(sPath, RoomTemplate.Id, MovementDirectionType.South, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY - 1] = RenderPathwayToAsciiForModals(sePath, RoomTemplate.Id, MovementDirectionType.SouthEast, forAdmin);

                break;

            case MapRenderMode.Upwards:
                IPathwayTemplate upPath   = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.Up);
                IPathwayTemplate upePath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpEast);
                IPathwayTemplate upnPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpNorth);
                IPathwayTemplate upnePath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpNorthEast);
                IPathwayTemplate upnwPath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpNorthWest);
                IPathwayTemplate upsPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpSouth);
                IPathwayTemplate upsePath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpSouthEast);
                IPathwayTemplate upswPath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpSouthWest);
                IPathwayTemplate upwPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.UpWest);

                expandedMap[expandedRoomX, expandedRoomY]         = RenderPathwayToAsciiForModals(upPath, RoomTemplate.Id, MovementDirectionType.Up, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY + 1] = RenderPathwayToAsciiForModals(upnwPath, RoomTemplate.Id, MovementDirectionType.UpNorthWest, forAdmin);
                expandedMap[expandedRoomX, expandedRoomY + 1]     = RenderPathwayToAsciiForModals(upnPath, RoomTemplate.Id, MovementDirectionType.UpNorth, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY + 1] = RenderPathwayToAsciiForModals(upnePath, RoomTemplate.Id, MovementDirectionType.UpNorthEast, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY]     = RenderPathwayToAsciiForModals(upwPath, RoomTemplate.Id, MovementDirectionType.UpWest, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY]     = RenderPathwayToAsciiForModals(upePath, RoomTemplate.Id, MovementDirectionType.UpEast, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY - 1] = RenderPathwayToAsciiForModals(upswPath, RoomTemplate.Id, MovementDirectionType.UpSouthWest, forAdmin);
                expandedMap[expandedRoomX, expandedRoomY - 1]     = RenderPathwayToAsciiForModals(upsPath, RoomTemplate.Id, MovementDirectionType.UpSouth, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY - 1] = RenderPathwayToAsciiForModals(upsePath, RoomTemplate.Id, MovementDirectionType.UpSouthEast, forAdmin);

                break;

            case MapRenderMode.Downwards:
                IPathwayTemplate downPath   = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.Down);
                IPathwayTemplate downePath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownEast);
                IPathwayTemplate downnPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownNorth);
                IPathwayTemplate downnePath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownNorthEast);
                IPathwayTemplate downnwPath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownNorthWest);
                IPathwayTemplate downsPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownSouth);
                IPathwayTemplate downsePath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownSouthEast);
                IPathwayTemplate downswPath = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownSouthWest);
                IPathwayTemplate downwPath  = pathways.FirstOrDefault(path => path.DirectionType == MovementDirectionType.DownWest);

                expandedMap[expandedRoomX, expandedRoomY]         = RenderPathwayToAsciiForModals(downPath, RoomTemplate.Id, MovementDirectionType.Down, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY + 1] = RenderPathwayToAsciiForModals(downnwPath, RoomTemplate.Id, MovementDirectionType.DownNorthWest, forAdmin);
                expandedMap[expandedRoomX, expandedRoomY + 1]     = RenderPathwayToAsciiForModals(downnPath, RoomTemplate.Id, MovementDirectionType.DownNorth, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY + 1] = RenderPathwayToAsciiForModals(downnePath, RoomTemplate.Id, MovementDirectionType.DownNorthEast, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY]     = RenderPathwayToAsciiForModals(downwPath, RoomTemplate.Id, MovementDirectionType.DownWest, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY]     = RenderPathwayToAsciiForModals(downePath, RoomTemplate.Id, MovementDirectionType.DownEast, forAdmin);
                expandedMap[expandedRoomX - 1, expandedRoomY - 1] = RenderPathwayToAsciiForModals(downswPath, RoomTemplate.Id, MovementDirectionType.DownSouthWest, forAdmin);
                expandedMap[expandedRoomX, expandedRoomY - 1]     = RenderPathwayToAsciiForModals(downsPath, RoomTemplate.Id, MovementDirectionType.DownSouth, forAdmin);
                expandedMap[expandedRoomX + 1, expandedRoomY - 1] = RenderPathwayToAsciiForModals(downsePath, RoomTemplate.Id, MovementDirectionType.DownSouthEast, forAdmin);

                break;
            }

            return(expandedMap);
        }