rendered paste bodyusing System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using LavishVMAPI;
namespace Bytebot
{
public class Navigator
{
const int FacePrecision = 15;
const int DirectMoveRange = 40;
private Thread _thread;
private LavishScriptAPI.Point3f _finaldestination;
private LavishScriptAPI.Point3f _currentdestination;
private LavishScriptAPI.Point3f _startlocation;
#region Constructor
public Navigator()
{
_thread = new Thread(new ThreadStart(Worker));
_thread.Name = "Navigator";
_thread.IsBackground = true;
_thread.Start();
}
#endregion
#region Worker
private static void Worker()
{
do
{
Thread.Sleep(50);
}
while (true);
}
#endregion
#region Public methods
public void Face(double X, double Y, bool Exact)
{
double Heading = 180;
double HeadingTo = 0;
if (!Exact)
{
Frame.Lock();
Heading = Bytebot.Global.WoW.Me.Heading;
HeadingTo = Bytebot.Global.WoW.Me.HeadingTo(X, Y);
Frame.Unlock();
}
if (Math.Abs(Heading-HeadingTo) > FacePrecision)
{
Bytebot.Global.WoW.Face(X, Y);
}
}
public void Face(double X, double Y)
{
Face(X,Y);
}
public void Face(LavishScriptAPI.Point3f Point)
{
Face(Point.X, Point.Y, false);
}
public void MoveTo(double X, double Y, double Z)
{
_finaldestination.X = X;
_finaldestination.Y = Y;
_finaldestination.Z = Z;
_currentdestination.X = X;
_currentdestination.Y = Y;
_currentdestination.Z = Z;
_startlocation = Bytebot.Global.WoW.Me.Location;
if ((Bytebot.Global.Distance(_startlocation, _finaldestination) < DirectMoveRange) && !Bytebot.Global.WoW.Me.IsPathObstructed(_finaldestination.X,_finaldestination.Y,_finaldestination.Z,DirectMoveRange))
{
}
else
{
}
}
public void MoveTo(LavishScriptAPI.Point3f Point)
{
MoveTo(Point.X, Point.Y, Point.Z);
}
#endregion
}
}