public override void DoExecute(BaseContext c)
        {
            NPCHumanContext nPCHumanContext = c as NPCHumanContext;

            if (c.GetFact(NPCPlayerApex.Facts.CanNotMove) == 1 || nPCHumanContext != null && nPCHumanContext.Human.NeverMove)
            {
                c.AIAgent.StopMoving();
                if (nPCHumanContext != null)
                {
                    nPCHumanContext.Human.SetFact(NPCPlayerApex.Facts.PathToTargetStatus, 2, true, true);
                }
                return;
            }
            c.AIAgent.SetFact(NPCPlayerApex.Facts.IsRetreatingToCover, 0, true, true);
            c.AIAgent.SetFact(NPCPlayerApex.Facts.SidesteppedOutOfCover, 0, true, true);
            if (UnityEngine.Time.time - nPCHumanContext.LastNavigationTime < 1f)
            {
                return;
            }
            nPCHumanContext.LastNavigationTime = UnityEngine.Time.time;
            if (nPCHumanContext.Human.NavAgent.pathPending)
            {
                return;
            }
            switch (this.Operator)
            {
            case HumanNavigateToOperator.OperatorType.EnemyLoc:
            {
                HumanNavigateToOperator.NavigateToEnemy(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.RandomLoc:
            {
                HumanNavigateToOperator.NavigateToRandomLoc(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.SpawnLoc:
            {
                HumanNavigateToOperator.NavigateToSpawnLoc(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.FleeEnemy:
            {
                HumanNavigateToOperator.FleeEnemy(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.FleeHurtDir:
            {
                HumanNavigateToOperator.FleeHurtDir(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.RetreatCover:
            {
                HumanNavigateToOperator.NavigateToCover(nPCHumanContext, HumanNavigateToOperator.TakeCoverIntention.Retreat);
                return;
            }

            case HumanNavigateToOperator.OperatorType.FlankCover:
            {
                HumanNavigateToOperator.NavigateToCover(nPCHumanContext, HumanNavigateToOperator.TakeCoverIntention.Flank);
                return;
            }

            case HumanNavigateToOperator.OperatorType.AdvanceCover:
            {
                HumanNavigateToOperator.NavigateToCover(nPCHumanContext, HumanNavigateToOperator.TakeCoverIntention.Advance);
                return;
            }

            case HumanNavigateToOperator.OperatorType.FleeExplosive:
            {
                HumanNavigateToOperator.FleeExplosive(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.Sidestep:
            {
                HumanNavigateToOperator.Sidestep(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.ClosestCover:
            {
                HumanNavigateToOperator.NavigateToCover(nPCHumanContext, HumanNavigateToOperator.TakeCoverIntention.Closest);
                return;
            }

            case HumanNavigateToOperator.OperatorType.PatrolLoc:
            {
                HumanNavigateToOperator.NavigateToPatrolLoc(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.MountableChair:
            {
                HumanNavigateToOperator.NavigateToMountableLoc(nPCHumanContext, this.Operator);
                return;
            }

            case HumanNavigateToOperator.OperatorType.WaypointLoc:
            {
                HumanNavigateToOperator.NavigateToWaypointLoc(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.LastEnemyLoc:
            {
                HumanNavigateToOperator.NavigateToLastEnemy(nPCHumanContext);
                return;
            }

            case HumanNavigateToOperator.OperatorType.HideoutLoc:
            {
                HumanNavigateToOperator.NavigateToHideout(nPCHumanContext);
                return;
            }

            default:
            {
                return;
            }
            }
        }
        public override void DoExecute(BaseContext c)
        {
            NPCHumanContext c1 = c as NPCHumanContext;

            if (c.GetFact(NPCPlayerApex.Facts.CanNotMove) == (byte)1 || c1 != null && c1.Human.NeverMove)
            {
                c.AIAgent.StopMoving();
                c1?.Human.SetFact(NPCPlayerApex.Facts.PathToTargetStatus, (byte)2, true, true);
            }
            else
            {
                c.AIAgent.SetFact(NPCPlayerApex.Facts.IsRetreatingToCover, (byte)0, true, true);
                c.AIAgent.SetFact(NPCPlayerApex.Facts.SidesteppedOutOfCover, (byte)0, true, true);
                if ((double)Time.get_time() - (double)c1.LastNavigationTime < 1.0)
                {
                    return;
                }
                c1.LastNavigationTime = Time.get_time();
                if (c1.Human.NavAgent.get_pathPending())
                {
                    return;
                }
                switch (this.Operator)
                {
                case HumanNavigateToOperator.OperatorType.EnemyLoc:
                    HumanNavigateToOperator.NavigateToEnemy(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.RandomLoc:
                    HumanNavigateToOperator.NavigateToRandomLoc(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.SpawnLoc:
                    HumanNavigateToOperator.NavigateToSpawnLoc(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.FleeEnemy:
                    HumanNavigateToOperator.FleeEnemy(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.FleeHurtDir:
                    HumanNavigateToOperator.FleeHurtDir(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.RetreatCover:
                    HumanNavigateToOperator.NavigateToCover(c1, HumanNavigateToOperator.TakeCoverIntention.Retreat);
                    break;

                case HumanNavigateToOperator.OperatorType.FlankCover:
                    HumanNavigateToOperator.NavigateToCover(c1, HumanNavigateToOperator.TakeCoverIntention.Flank);
                    break;

                case HumanNavigateToOperator.OperatorType.AdvanceCover:
                    HumanNavigateToOperator.NavigateToCover(c1, HumanNavigateToOperator.TakeCoverIntention.Advance);
                    break;

                case HumanNavigateToOperator.OperatorType.FleeExplosive:
                    HumanNavigateToOperator.FleeExplosive(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.Sidestep:
                    HumanNavigateToOperator.Sidestep(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.ClosestCover:
                    HumanNavigateToOperator.NavigateToCover(c1, HumanNavigateToOperator.TakeCoverIntention.Closest);
                    break;

                case HumanNavigateToOperator.OperatorType.PatrolLoc:
                    HumanNavigateToOperator.NavigateToPatrolLoc(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.MountableChair:
                    HumanNavigateToOperator.NavigateToMountableLoc(c1, this.Operator);
                    break;

                case HumanNavigateToOperator.OperatorType.WaypointLoc:
                    HumanNavigateToOperator.NavigateToWaypointLoc(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.LastEnemyLoc:
                    HumanNavigateToOperator.NavigateToLastEnemy(c1);
                    break;

                case HumanNavigateToOperator.OperatorType.HideoutLoc:
                    HumanNavigateToOperator.NavigateToHideout(c1);
                    break;
                }
            }
        }