protected void BeginPathTravel(DFPosition targetPixel, bool starting = true)
        {
            if (targetPixel != null)
            {
                lastCrossed = 0;
                travelControlUI.SetDestination(road ? MsgFollowRoad : MsgFollowTrack);
                DFPosition targetMPworld = MapsFile.MapPixelToWorldCoord(targetPixel.X, targetPixel.Y);

                Rect targetRect = SetLocationRects(targetPixel, targetMPworld) ? locationBorderRect : new Rect(targetMPworld.X + MidLo, targetMPworld.Y + MidLo, PSize, PSize);

                DestinationCautious = true;
                if (starting && alwaysUseStartingAccel)
                {
                    travelControlUI.TimeAcceleration = defaultStartingAccel;
                }
                travelControlUI.HalfLimit = true;

                if (playerAutopilot == null)
                {
                    playerAutopilot            = new PlayerAutoPilot(targetPixel, targetRect, road ? RecklessTravelMultiplier : CautiousTravelMultiplier);
                    playerAutopilot.OnArrival += SelectNextPath;
                }
                else
                {
                    playerAutopilot.InitTargetRect(targetPixel, targetRect, road ? RecklessTravelMultiplier : CautiousTravelMultiplier);
                }
                InitTravelUI();
            }
        }
        public void BeginTravel()
        {
            if (!string.IsNullOrEmpty(DestinationName))
            {
                playerAutopilot            = new PlayerAutoPilot(DestinationSummary, GetTravelSpeedMultiplier());
                playerAutopilot.OnArrival += () =>
                {
                    travelControlUI.CloseWindow();
                    ClearTravelDestination();
                    DaggerfallUI.MessageBox(MsgArrived);
                    Debug.Log("Elapsed time for trip: " + (DaggerfallUnity.Instance.WorldTime.Now.ToClassicDaggerfallTime() - beginTime));
                };

                lastLocation = GameManager.Instance.PlayerGPS.CurrentLocation;
                SetTimeScale(travelControlUI.TimeAcceleration);
                DisableWeatherAndSound();
                diseaseCount = GameManager.Instance.PlayerEffectManager.DiseaseCount;

                // Register event for entering location rects
                if (locationPause == LocPauseEnter)
                {
                    PlayerGPS.OnEnterLocationRect += PlayerGPS_OnEnterLocationRect;
                }

                Debug.Log("Begun travel to " + DestinationName);
            }
        }
 public void ClearTravelDestination()
 {
     DestinationName = null;
     playerAutopilot = null;
     if (travelControlUI.isShowing)
     {
         travelControlUI.CloseWindow();
     }
 }
        public void BeginTravel()
        {
            if (!string.IsNullOrEmpty(DestinationName))
            {
                playerAutopilot            = new PlayerAutoPilot(DestinationSummary, GetTravelSpeedMultiplier());
                playerAutopilot.OnArrival += () =>
                {
                    travelControlUI.CloseWindow();
                    ClearTravelDestination();
                    DaggerfallUI.MessageBox(MsgArrived);
                    Debug.Log("Elapsed time for trip: " + (DaggerfallUnity.Instance.WorldTime.Now.ToClassicDaggerfallTime() - beginTime));
                };

                lastLocation = GameManager.Instance.PlayerGPS.CurrentLocation;
                InitTravelUI();

                Debug.Log("Begun accelerated travel to " + DestinationName);
            }
        }
        /// <summary>
        /// Stops travel, but leaves current destination active
        /// </summary>
        public void InterruptTravel()
        {
            Debug.Log("Travel interrupted");
            SetTimeScale(1);
            GameManager.Instance.PlayerMouseLook.enableMouseLook  = true;
            GameManager.Instance.PlayerMouseLook.lockCursor       = true;
            GameManager.Instance.PlayerMouseLook.simpleCursorLock = false;
            if (playerAutopilot != null)
            {
                playerAutopilot.MouseLookAtDestination();
            }
            playerAutopilot = null;
            EnableWeatherAndSound();

            // Remove event for entering location rects
            if (locationPause == LocPauseEnter)
            {
                PlayerGPS.OnEnterLocationRect -= PlayerGPS_OnEnterLocationRect;
            }
        }
        protected void CircumnavigateLocation()
        {
            PlayerGPS  playerGPS    = GameManager.Instance.PlayerGPS;
            DFPosition currMapPixel = playerGPS.CurrentMapPixel;

            if (circumnavigatePathsDataPt == 0)
            {
                circumnavigatePathsDataPt = GetPathsDataPoint(currMapPixel);
            }
            int yaw = (int)GetNormalisedPlayerYaw();

            Rect    targetRect;
            Vector2 worldPos = new Vector2(playerGPS.WorldX, playerGPS.WorldZ);

            if (locBorderNERect.Contains(worldPos))                                                         // NE Corner
            {
                targetRect = (yaw > 45 && yaw < 225) ? locBorderSERect : locBorderNWRect;
            }
            else if (locBorderSERect.Contains(worldPos))                                                    // SE Corner
            {
                targetRect = (yaw > 135 && yaw < 315) ? locBorderSWRect : locBorderNERect;
            }
            else if (locBorderSWRect.Contains(worldPos))                                                    // SW Corner
            {
                targetRect = (yaw > 45 && yaw < 225) ? locBorderSERect : locBorderNWRect;
            }
            else if (locBorderNWRect.Contains(worldPos))                                                    // NW Corner
            {
                targetRect = (yaw > 135 && yaw < 315) ? locBorderSWRect : locBorderNERect;
            }

            else if (playerGPS.WorldZ > locationRect.yMax && playerGPS.WorldZ < locationBorderRect.yMax)    // North edge
            {
                targetRect = (yaw > 180 && yaw < 360) ? locBorderNWRect : locBorderNERect;
            }
            else if (playerGPS.WorldZ > locationBorderRect.yMin && playerGPS.WorldZ < locationRect.yMin)    // South edge
            {
                targetRect = (yaw > 180 && yaw < 360) ? locBorderSWRect : locBorderSERect;
            }
            else if (playerGPS.WorldX > locationRect.xMax && playerGPS.WorldX < locationBorderRect.xMax)    // East edge
            {
                targetRect = (yaw > 90 && yaw < 270) ? locBorderSERect : locBorderNERect;
            }
            else if (playerGPS.WorldX > locationBorderRect.xMin && playerGPS.WorldX < locationRect.xMin)    // West edge
            {
                targetRect = (yaw > 90 && yaw < 270) ? locBorderSWRect : locBorderNWRect;
            }
            else
            {
                return;
            }

            travelControlUI.SetDestination(string.Format(MsgCircumnavigate, GameManager.Instance.PlayerGPS.CurrentLocation.Name));

            DestinationCautious = false;
            if (alwaysUseStartingAccel)
            {
                travelControlUI.TimeAcceleration = defaultStartingAccel;
            }
            travelControlUI.HalfLimit = true;

            playerAutopilot            = new PlayerAutoPilot(currMapPixel, targetRect, GetTravelSpeedMultiplier());
            playerAutopilot.OnArrival += () => { CircumnavigateLocation(); };

            InitTravelUI(true);
        }