You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.4 KiB
83 lines
2.4 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
using Sog;
|
|
using Sog.Service;
|
|
using ProtoCSStruct;
|
|
|
|
namespace Game
|
|
{
|
|
public class MoveUtils
|
|
{
|
|
public static PF.Vector3 GetVector3FromPosition(DBPosition pos)
|
|
{
|
|
return new PF.Vector3((float)pos.X / 1000, (float)pos.Y / 1000, (float)pos.Z / 1000);
|
|
}
|
|
|
|
public static DBPosition GetPositionFromVector3(PF.Vector3 pos)
|
|
{
|
|
return new DBPosition() { X = (int)(pos.x*1000), Y = (int)(pos.y*1000), Z = (int)(pos.z*1000)};
|
|
}
|
|
|
|
public static bool IsPosSame(DBPosition src, DBPosition dst)
|
|
{
|
|
return src.X == dst.X && src.Y == dst.Y && src.Z == dst.Z;
|
|
}
|
|
|
|
//不开方的计算,提高效率
|
|
public static long GetDistanceSquare3D(ref DBPosition pos1, ref DBPosition pos2)
|
|
{
|
|
long xDis = pos1.X - pos2.X;
|
|
long yDis = pos1.Y - pos2.Y;
|
|
long zDis = pos1.Z - pos2.Z;
|
|
|
|
return xDis * xDis + yDis * yDis + zDis * zDis;
|
|
}
|
|
|
|
public static long GetDistance3D(ref DBPosition pos1, ref DBPosition pos2)
|
|
{
|
|
long disSquare = GetDistanceSquare3D(ref pos1, ref pos2);
|
|
|
|
return (long)Sog.MathUtils.FastSqrtIEEE((double)disSquare);
|
|
}
|
|
|
|
//不开方的计算,提高效率
|
|
public static long GetDistanceSquare2D(ref DBPosition pos1, ref DBPosition pos2)
|
|
{
|
|
long xDis = pos1.X - pos2.X;
|
|
long zDis = pos1.Z - pos2.Z;
|
|
|
|
return xDis * xDis + zDis * zDis;
|
|
}
|
|
|
|
public static long GetDistance2D(ref DBPosition pos1, ref DBPosition pos2)
|
|
{
|
|
long disSquare = GetDistanceSquare3D(ref pos1, ref pos2);
|
|
|
|
return (long)Sog.MathUtils.FastSqrtIEEE((double)disSquare);
|
|
}
|
|
|
|
public static int ComputeCoordinate(int iDeltaX, int x, int iDist1, int iDist2)
|
|
{
|
|
long tmpDeltaX;
|
|
int tmpX;
|
|
long tmpDist1;
|
|
long tmpDist2;
|
|
int iRet = 0;
|
|
|
|
tmpDeltaX = iDeltaX;
|
|
tmpX = x;
|
|
tmpDist1 = iDist1;
|
|
tmpDist2 = iDist2;
|
|
|
|
if (tmpDist2 == 0)
|
|
{
|
|
tmpDist2 = 1;
|
|
}
|
|
iRet = (int)((tmpDeltaX * tmpDist1) / tmpDist2) + tmpX;
|
|
return iRet;
|
|
}
|
|
}
|
|
}
|
|
|