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); }