Esempio n. 1
0
        public bool RotateRooms(RoomPosition position, Direction direction)
        {
            Dictionary <RoomPosition, BaseRoom> result = new Dictionary <RoomPosition, BaseRoom>();
            Rotation rotation = GetRotation(position, direction);

            switch (rotation)
            {
            case Rotation.Clockwise:
                result.Add(RoomPosition.One, RoomPositions[RoomPosition.Three]);
                result.Add(RoomPosition.Two, RoomPositions[RoomPosition.One]);
                result.Add(RoomPosition.Three, RoomPositions[RoomPosition.Four]);
                result.Add(RoomPosition.Four, RoomPositions[RoomPosition.Two]);
                break;

            case Rotation.CounterClockwise:
                result.Add(RoomPosition.One, RoomPositions[RoomPosition.Two]);
                result.Add(RoomPosition.Two, RoomPositions[RoomPosition.Four]);
                result.Add(RoomPosition.Three, RoomPositions[RoomPosition.One]);
                result.Add(RoomPosition.Four, RoomPositions[RoomPosition.Three]);
                break;

            case Rotation.None:
                return(false); // Get out of here if we arent rotating.
            }
            RoomPositions = result;
            return(true);
        }
Esempio n. 2
0
        public ConsoleColor GetDoorColor(RoomPosition roomPosition, Direction direction)
        {
            BaseRoom room          = RoomPositions[roomPosition];
            BaseRoom adjoiningRoom = GetAdjoiningRoom(roomPosition, direction);
            char     doorChar      = room.DoorCharacter(direction);

            if (DoorsAreMerged(roomPosition, direction))
            {
                // We need to get the merged color
                return(GetMergedColor(room, adjoiningRoom));
            }

            if (ColoredDoorChars.Contains(doorChar))
            {
                return(room.Color);
            }

            // If the adjoining door is a color door we get that
            if (adjoiningRoom != null)
            {
                char adjoiningDoorChar = adjoiningRoom.DoorCharacter(GetOppisiteDirection(direction));
                if (ColoredDoorChars.Contains(adjoiningDoorChar))
                {
                    return(adjoiningRoom.Color);
                }
            }

            return(Types.WALL_AND_DOOR_COLOR);
        }
Esempio n. 3
0
        private ConsoleParams Lookup(char c, int row, int col, RoomPosition pos)
        {
            BaseRoom     room      = RoomPositions[pos];
            char         doorChar  = RoomChar(room, row, col);
            ConsoleColor doorColor = ColoredDoorChars.Contains(doorChar) ? room.Color : Types.WALL_AND_DOOR_COLOR;

            return(new ConsoleParams(doorChar.ToString(), doorColor, Types.BACKGROUND_COLOR));
        }
Esempio n. 4
0
        public DoorState DoorLockState(RoomPosition position, Direction direction)
        {
            if (Lock.DoorIsLocked(position, direction))
            {
                return(Types.DoorState.Locked);
            }

            return(Types.DoorState.Open);
        }
Esempio n. 5
0
        private ConsoleParams VerticalOverlap(char c, int row, int col, RoomPosition pos)
        {
            // If we are here we know we are looking east
            // We will use Direction.East

            ConsoleColor color    = GetDoorColor(pos, Direction.East);
            char         doorChar = GetDoorChar(pos, Direction.East);

            return(new ConsoleParams(doorChar.ToString(), color, Types.ROOM_COLOR));
        }
Esempio n. 6
0
        private ConsoleParams HorizontalOverlap(char c, int row, int col, RoomPosition pos)
        {
            // If we are here we know that we are looking south
            // to check the overlap so we use Direction.South
            BaseRoom     room     = RoomPositions[pos];
            ConsoleColor color    = GetDoorColor(pos, Direction.South);
            char         doorChar = GetDoorChar(pos, Direction.South);

            return(new ConsoleParams(doorChar.ToString(), color, Types.ROOM_COLOR));
        }
Esempio n. 7
0
        public RoomPosition GetAdjoiningRoomPosition(RoomPosition currentPosition, Direction direction)
        {
            RoomPosition result = currentPosition;

            switch (currentPosition)
            {
            case RoomPosition.One:
                switch (direction)
                {
                case Direction.South:
                    return(RoomPosition.Three);

                case Direction.East:
                    return(RoomPosition.Two);
                }
                break;

            case RoomPosition.Two:
                switch (direction)
                {
                case Direction.South:
                    return(RoomPosition.Four);

                case Direction.West:
                    return(RoomPosition.One);
                }
                break;

            case RoomPosition.Three:
                switch (direction)
                {
                case Direction.North:
                    return(RoomPosition.One);

                case Direction.East:
                    return(RoomPosition.Four);
                }
                break;

            case RoomPosition.Four:
                switch (direction)
                {
                case Direction.North:
                    return(RoomPosition.Two);

                case Direction.West:
                    return(RoomPosition.Three);
                }
                break;
            }

            return(result);
        }
Esempio n. 8
0
        public bool DoorsAreMerged(RoomPosition currentPosition, Direction direction)
        {
            BaseRoom adjoiningRoom = GetAdjoiningRoom(currentPosition, direction);

            if (adjoiningRoom == null)
            {
                return(false);
            }

            bool currentIsMergable   = ColoredDoorChars.Contains(RoomPositions[currentPosition].DoorCharacter(direction));
            bool adjoiningIsMergable = ColoredDoorChars.Contains(adjoiningRoom.DoorCharacter(GetOppisiteDirection(direction)));

            return(currentIsMergable && adjoiningIsMergable);
        }
Esempio n. 9
0
        public Rotation GetRotation(RoomPosition position, Direction direction)
        {
            switch (position)
            {
            case RoomPosition.One:
                switch (direction)
                {
                case Direction.South:
                    return(Rotation.Clockwise);

                case Direction.East:
                    return(Rotation.CounterClockwise);
                }
                break;

            case RoomPosition.Two:
                switch (direction)
                {
                case Direction.South:
                    return(Rotation.CounterClockwise);

                case Direction.West:
                    return(Rotation.Clockwise);
                }
                break;

            case RoomPosition.Three:
                switch (direction)
                {
                case Direction.North:
                    return(Rotation.CounterClockwise);

                case Direction.East:
                    return(Rotation.Clockwise);
                }
                break;

            case RoomPosition.Four:
                switch (direction)
                {
                case Direction.North:
                    return(Rotation.Clockwise);

                case Direction.West:
                    return(Rotation.CounterClockwise);
                }
                break;
            }
            return(Rotation.None);
        }
Esempio n. 10
0
        // public char GetDoorCharacter(BaseRoom room, Direction direction)
        // {
        //   return room.DoorCharacter(direction);
        // }

        public char GetDoorChar(RoomPosition roomPosition, Direction direction)
        {
            BaseRoom currentRoom   = RoomPositions[roomPosition];
            BaseRoom adjoiningRoom = GetAdjoiningRoom(roomPosition, direction);

            char curRoomChar = currentRoom.DoorCharacter(direction);

            if (adjoiningRoom == null)
            {
                return(curRoomChar);
            }

            char adjRoomChar = adjoiningRoom.DoorCharacter(GetOppisiteDirection(direction));

            if (ColoredDoorChars.Contains(adjRoomChar))
            {
                return(adjRoomChar);
            }

            return(curRoomChar);
        }
Esempio n. 11
0
        private ConsoleParams RoomDesignator(char c, int row, int col, RoomPosition pos)
        {
            char roomChar = RoomInfo[RoomPositions[pos].Id].Character;

            return(new ConsoleParams(roomChar.ToString(), GetForegroundColor(), GetBackgroundColor(pos)));
        }
Esempio n. 12
0
 private ConsoleParams Space(char c, int row, int col, RoomPosition pos)
 {
     return(new ConsoleParams(' '.ToString(), GetForegroundColor(), GetBackgroundColor(pos)));
 }
Esempio n. 13
0
 // ConsoleParamsDelegates...
 private ConsoleParams Copy(char c, int row, int col, RoomPosition pos)
 {
     return(new ConsoleParams(c.ToString(), Types.WALL_AND_DOOR_COLOR, Types.ROOM_COLOR));
 }
Esempio n. 14
0
        public ConsoleColor GetBackgroundColor(RoomPosition pos)
        {
            BaseRoom room = RoomPositions[pos];

            return(FullyMerged() ? room.Color : Types.BACKGROUND_COLOR);
        }
Esempio n. 15
0
        public BaseRoom GetAdjoiningRoom(RoomPosition currentPosition, Direction direction)
        {
            switch (currentPosition)
            {
            case RoomPosition.One:
                switch (direction)
                {
                case Direction.South:
                    return(RoomPositions[RoomPosition.Three]);

                case Direction.East:
                    return(RoomPositions[RoomPosition.Two]);

                default:
                    break;
                }
                break;

            case RoomPosition.Two:
                switch (direction)
                {
                case Direction.West:
                    return(RoomPositions[RoomPosition.One]);

                case Direction.South:
                    return(RoomPositions[RoomPosition.Four]);

                default:
                    break;
                }
                break;

            case RoomPosition.Three:
                switch (direction)
                {
                case Direction.North:
                    return(RoomPositions[RoomPosition.One]);

                case Direction.East:
                    return(RoomPositions[RoomPosition.Four]);

                default:
                    break;
                }
                break;

            case RoomPosition.Four:
                switch (direction)
                {
                case Direction.North:
                    return(RoomPositions[RoomPosition.Two]);

                case Direction.West:
                    return(RoomPositions[RoomPosition.Three]);

                default:
                    break;
                }
                break;

            default:
                break;
            }
            return(null);
        }