60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using System;
|
|
using ClassicAssist.UO.Data;
|
|
|
|
namespace ClassicAssist.UO
|
|
{
|
|
public static class UOMath
|
|
{
|
|
public static Direction MapDirection( float x1, float y1, float x2, float y2 )
|
|
{
|
|
float slope = ( y2 - y1 ) / ( x2 - x1 );
|
|
|
|
if ( float.IsNaN( slope ) )
|
|
{
|
|
return Direction.Invalid;
|
|
}
|
|
|
|
if ( slope >= 2f && slope <= float.PositiveInfinity || slope <= -2f && slope >= float.NegativeInfinity )
|
|
{
|
|
return y2 < y1 ? Direction.North : Direction.South;
|
|
}
|
|
|
|
if ( slope <= .5f && slope >= 0f || slope >= -.5f && slope <= 0f )
|
|
{
|
|
return x2 < x1 ? Direction.West : Direction.East;
|
|
}
|
|
|
|
if ( slope <= -.5f && slope >= -1f || slope >= -2f && slope <= -1f )
|
|
{
|
|
return y2 < y1 ? Direction.Northeast : Direction.Southwest;
|
|
}
|
|
|
|
if ( slope <= 2f && slope >= 1 || slope >= .5f && slope <= 1 )
|
|
{
|
|
return y2 < y1 ? Direction.Northwest : Direction.Southeast;
|
|
}
|
|
|
|
return Direction.Invalid;
|
|
}
|
|
|
|
public static double Distance( int x1, int y1, int z1, int x2, int y2, int z2 )
|
|
{
|
|
int d1 = Math.Abs( x1 - x2 );
|
|
int d2 = Math.Abs( y1 - y2 );
|
|
int d3 = Math.Abs( z1 - z2 );
|
|
return Math.Sqrt( d1 * d1 + d2 * d2 + d3 * d3 );
|
|
}
|
|
|
|
public static double Distance( int x1, int y1, int x2, int y2 )
|
|
{
|
|
int d1 = Math.Abs( x1 - x2 );
|
|
int d2 = Math.Abs( y1 - y2 );
|
|
return Math.Sqrt( d1 * d1 + d2 * d2 );
|
|
}
|
|
|
|
public static bool IsMobile( int serial )
|
|
{
|
|
return (uint) serial < 0x40000000;
|
|
}
|
|
}
|
|
} |