private void PlayPath(string pathName, Pathing pType, bool forawrd, int index, dynamic log = null)
{
if (Moving)
return;
Moving = true;
var zoneId = Funcs.GetZoneId();
HaltFlag = false;
float heading;
float tobeHeading;
foreach (
var waypoint in
RebuildList(_Waypoints.Zone.First(p => p.ID == zoneId).Path.First(i => i.Name == pathName).Point,
forawrd, pType, index))
{
if (CorDelay)
Funcs.SetMoveStatus(WalkingStatus.Standing);
ModelRotation(waypoint);
if (CamReset)
SendKeyPress(KeyStates.Toggled, Key.End);
if (CorDelay)
Thread.Sleep(HeadToll);
var decX = (Funcs.GetPOS(EntityType.PCMob, Axis.X, 0) > waypoint.x);
Funcs.SetMoveStatus(WalkingStatus.Autorun | WalkingStatus.Running);
if (decX)
{
while (Funcs.GetPOS(EntityType.PCMob, Axis.X, 0) > waypoint.x)
{
if (HaltFlag)
{
Funcs.SetMoveStatus(WalkingStatus.Standing);
Moving = false;
return;
}
if (AICorrection)
{
heading = Funcs.GetHeading(EntityType.PCMob, 0);
tobeHeading = HeadingToRad(AllEntities.Get2DPos(), waypoint);
// Check if our heading is within our tolerance.
if (tobeHeading - heading < 0 ? tobeHeading - heading < -0.1f : tobeHeading - heading > 0.1f)
ModelRotation(waypoint);
}
Thread.Sleep(10);
}
}
else
{
while (Funcs.GetPOS(EntityType.PCMob, Axis.X, 0) < waypoint.x)
{
if (HaltFlag)
{
Funcs.SetMoveStatus(WalkingStatus.Standing);
Moving = false;
return;
}
if (AICorrection)
{
heading = Funcs.GetHeading(EntityType.PCMob, 0);
tobeHeading = HeadingToRad(AllEntities.Get2DPos(), waypoint);
// Check if our heading is within our tolerance.
if (tobeHeading - heading < 0 ? tobeHeading - heading < -0.1f : tobeHeading - heading > 0.1f)
ModelRotation(waypoint);
}
Thread.Sleep(10);
}
}
if (log != null)
log.AppendTextP(string.Format("{0} {1} {2}\u2028", pathName, waypoint.x, waypoint.y));
}
Funcs.SetMoveStatus(WalkingStatus.Standing);
Moving = false;
}