public static Subregion FromProtoSubregion(Region region, ProtoSubregion ps)
 {
     Subregion subregion = new Subregion();
     subregion.ID = ps.ID;
     subregion.Name = ps.Name;
     subregion.Color = ps.Color;
     subregion.Region = region;
     foreach (ProtoRoom pr in ps.ProtoRooms)
     {
         subregion.Rooms.Add(Room.FromProtoRoom(region, subregion, pr));
     }
     return subregion;
 }
        public static Room FromProtoRoom(Region region, Subregion subregion, ProtoRoom pr)
        {
            Room room = new Room();
            room.ID = pr.ID;
            room._coordinatesXY = pr.CoordinatesXY;
            room._region = region;
            room._subregion = subregion;

            // sort room connections
            List<KeyValuePair<string, Tuple<int, int, int>>> DirectionalRoomConnectionsList = pr.DirectionalRoomConnections.ToList();
            DirectionalRoomConnectionsList.Sort((x, y) => Statics.SortRoomConnections(x.Key, y.Key));
            Dictionary<string, Tuple<int, int, int>> DirectionalRoomConnectionsDictionary = DirectionalRoomConnectionsList.ToDictionary((x) => x.Key, (x) => x.Value);

            room.DirectionalRoomConnections = new ReadOnlyDictionary<string, Tuple<int, int, int>>(DirectionalRoomConnectionsDictionary);
            room.RoomConnections = new ReadOnlyCollection<RoomConnection>(pr.ProtoRoomConnections);
            room._elevation = pr.Elevation;
            room._elevationcolor = pr.ElevationColor;

            return room;
        }
        public Room GetRoom(Subregion currentMouseSubregion, int x, int y)
        {
            foreach (Room room in currentMouseSubregion.Rooms)
            {
                if (room.CoordinatesXY.X == x && room.CoordinatesXY.Y == y)
                {
                    return room;
                }
            }

            return null;
        }