public static Point3D FindLocation( Map map )
{
if ( map == null || map == Map.Internal )
return Point3D.Zero;
Rectangle2D[] regions;
if ( map == Map.Felucca )
regions = m_BritRegions;
else
regions = new Rectangle2D[]{ new Rectangle2D( 0, 0, map.Width, map.Height ) };
if ( regions.Length == 0 )
return Point3D.Zero;
for ( int i = 0; i < 50; ++i )
{
Rectangle2D reg = regions[Utility.Random( regions.Length )];
int x = Utility.Random( reg.X, reg.Width );
int y = Utility.Random( reg.Y, reg.Height );
if ( !ValidateDeepWater( map, x, y ) )
continue;
bool valid = true;
for ( int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5 )
{
if ( !ValidateDeepWater( map, x + offset, y + offset ) )
valid = false;
else if ( !ValidateDeepWater( map, x + offset, y - offset ) )
valid = false;
else if ( !ValidateDeepWater( map, x - offset, y + offset ) )
valid = false;
else if ( !ValidateDeepWater( map, x - offset, y - offset ) )
valid = false;
}
if ( valid )
return new Point3D( x, y, 0 );
}
return Point3D.Zero;
}