private void DrawBorder(BorderDesc border, Graphics g, int x1, int y1, int x2, int y2, int dx, int dy)
 {
     Contract.Requires(border != null);
     Contract.Requires(g != null);
     if (!WallEditMode)
     {
         if (border.IsSecretHiddenBorder)
         {
             g.DrawLine(Pens.Red, x1, y1, x2, y2);
             x1 += dx;
             x2 += dx;
             y1 += dy;
             y2 += dy;
         }
         if (border.IsSecretRevealedBorder)
         {
             g.DrawLine(Pens.Green, x1, y1, x2, y2);
             x1 += dx;
             x2 += dx;
             y1 += dy;
             y2 += dy;
         }
         if (border.IsLightBorder)
         {
             g.DrawLine(Pens.Yellow, x1, y1, x2, y2);
             x1 += dx;
             x2 += dx;
             y1 += dy;
             y2 += dy;
         }
     }
     else
     {
         if (border.IsSecretHiddenBorder || border.IsSecretRevealedBorder)
         {
             g.DrawLine(Pens.Red, x1, y1, x2, y2);
             x1 += dx;
             x2 += dx;
             y1 += dy;
             y2 += dy;
         }
     }
     if (border.IsBlocksLOSBorder)
     {
         g.DrawLine(Pens.Magenta, x1, y1, x2, y2);
         x1 += dx;
         x2 += dx;
         y1 += dy;
         y2 += dy;
     }
     g.DrawLine(Pens.Black, x1, y1, x2, y2);
 }
 private static BorderDesc CompareTileBorders(Tile current, Tile neighbor = null)
 {
     Contract.Requires(current != null);
     BorderDesc result = new BorderDesc();
     if (neighbor == null)
     {
         result.IsLightBorder = current.LightLevel >= 5;
         result.IsSecretHiddenBorder = current.HasSecret && !current.IsRevealed;
         result.IsSecretRevealedBorder = current.HasSecret && current.IsRevealed;
     }
     else
     {
         result.IsLightBorder = current.LightLevel >= 5 && neighbor.LightLevel < 5;
         result.IsSecretHiddenBorder = (current.HasSecret && !current.IsRevealed) && (!neighbor.HasSecret || neighbor.IsRevealed);
         result.IsSecretRevealedBorder = (current.HasSecret && current.IsRevealed) && (!neighbor.HasSecret || !neighbor.IsRevealed);
         result.IsBlocksLOSBorder = current.NoLOSBetweenTiles.Contains(neighbor);
     }
     return result;
 }