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); }
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); }
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)); }
public DoorState DoorLockState(RoomPosition position, Direction direction) { if (Lock.DoorIsLocked(position, direction)) { return(Types.DoorState.Locked); } return(Types.DoorState.Open); }
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)); }
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)); }
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); }
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); }
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); }
// 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); }
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))); }
private ConsoleParams Space(char c, int row, int col, RoomPosition pos) { return(new ConsoleParams(' '.ToString(), GetForegroundColor(), GetBackgroundColor(pos))); }
// 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)); }
public ConsoleColor GetBackgroundColor(RoomPosition pos) { BaseRoom room = RoomPositions[pos]; return(FullyMerged() ? room.Color : Types.BACKGROUND_COLOR); }
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); }