示例#1
0
        public static bool DoRoute(CarRoutingComponent ths, Route r)
        {
            bool flag = RoutingComponentEx.DoRoute(ths, r);

            ths.mOwnerVehicle.IdleAudio(true);
            return(flag);
        }
        private bool DoSingleRouteEx(Route r, bool bAllowOverlays)
        {
            Common.StringBuilder msg = new Common.StringBuilder("DoSingleRouteEx");

            try
            {
                mbRouteLeadInPlaying = false;
                if ((bAllowOverlays && (r.GetDistanceRemaining() > TraitTuning.RouteDistanceForIdle)) && !r.GetOption(Route.RouteOption.DisableRouteLeadIns))
                {
                    if (!mOwnerSim.IsHoldingAnything() && RandomUtil.RandomChance01(TraitTuning.ChanceForRouteLeadIn))
                    {
                        mOwnerSim.OverlayComponent.UpdateInteractionFreeParts(AwarenessLevel.OverlayUpperbody);
                        uint segmentAtDistanceBeforeEnd = r.GetSegmentAtDistanceBeforeEnd(SimScriptAdaptor.DistanceToStopOverlay, true);
                        r.RegisterCallback(OnAboutToFinishRoute, RouteCallbackType.TriggerOnce, RouteCallbackConditions.EnteringSegment(segmentAtDistanceBeforeEnd));
                        r.RegisterCallback(OnRouteFinished, RouteCallbackType.TriggerOnce, new RouteCallbackCondition(RouteCallbackConditions.Ended));
                        mbRouteLeadInPlaying = mOwnerSim.IdleManager.PlayRouteLeadIn();
                        if (mbRouteLeadInPlaying)
                        {
                            OverlayComponent overlayComponent = mOwnerSim.OverlayComponent;
                            overlayComponent.OverlaysEnded += OnOverlaysEnded;
                        }
                    }
                    if (mOwnerSim.IsHuman)
                    {
                        mOwnerSim.OverlayComponent.PlayReaction(ReactionTypes.FacialAutoSelect, null);
                    }
                }

                if (mOwnerSim.IsHorse || mOwnerSim.IsDeer)
                {
                    r.RegisterCallback(HorseDeerRoutingEffectsCallback, RouteCallbackType.TriggerWhileTrue, new RouteCallbackCondition(RouteCallbackConditions.AnimationTriggeredEvent));
                }
                else if ((mOwnerSim.IsPuppy || mOwnerSim.IsKitten) && SeasonsManager.Enabled)
                {
                    r.RegisterCallback(PuppyKittenSnowLevelCallback, RouteCallbackType.TriggerOnTrue, new RouteCallbackCondition(RouteCallbackConditions.InDeepSnow));
                    r.RegisterCallback(PuppyKittenSnowLevelCallback, RouteCallbackType.TriggerOnTrue, new RouteCallbackCondition(RouteCallbackConditions.InShallowSnow));
                }

                bool            flag    = false;
                IHasScriptProxy destObj = r.DestObj;
                try
                {
                    flag = RoutingComponentEx.DoRoute(this, r);
                    float       maxMinutesToWaitForRouteLeadIn = SimScriptAdaptor.MaxMinutesToWaitForRouteLeadIn;
                    DateAndTime previousDateAndTime            = SimClock.CurrentTime();

                    while (mbRouteLeadInPlaying && (SimClock.ElapsedTime(TimeUnit.Minutes, previousDateAndTime) < maxMinutesToWaitForRouteLeadIn))
                    {
                        SpeedTrap.Sleep();
                    }

                    if (UsingStroller)
                    {
                        new GetOutOfStrollerRouteAction(mOwnerSim, r).PerformAction();
                    }
                }
                finally
                {
                    if (mbRouteLeadInPlaying)
                    {
                        mbRouteLeadInPlaying = false;
                        OverlayComponent component2 = mOwnerSim.OverlayComponent;
                        component2.OverlaysEnded -= OnOverlaysEnded;
                        mOwnerSim.OverlayComponent.StopAllOverlays();
                    }

                    try
                    {
                        mOwnerSim.IdleManager.StopFacialIdle(true);
                    }
                    catch (Exception e)
                    {
                        Common.Exception(mOwnerSim, e);
                    }

                    if (UsingStroller)
                    {
                        new GetOutOfStrollerRouteAction(mOwnerSim, r).PerformAction();
                    }
                }

                if (!flag || !mOwnerSim.HasExitReason(ExitReason.ObjectStateChanged))
                {
                    return(flag);
                }

                if (r.DoRouteFail)
                {
                    InteractionInstance currentInteraction = mOwnerSim.CurrentInteraction;
                    if ((currentInteraction != null) && (currentInteraction.Target != null))
                    {
                        mOwnerSim.PlayRouteFailure(currentInteraction.Target.GetThoughtBalloonThumbnailKey());
                    }
                    else
                    {
                        mOwnerSim.PlayRouteFailure();
                    }
                }
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(mOwnerSim, e);
            }

            return(false);
        }