BolterLibrary.Navigation.PlayPath C# (CSharp) Метод

PlayPath() приватный Метод

private PlayPath ( string pathName, Pathing pType, bool forawrd, int index, dynamic log = null ) : void
pathName string
pType Pathing
forawrd bool
index int
log dynamic
Результат void
        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;
        }