private void CloseToComputer()
 {
     if (_playerPos.DistanceTo(_station.Position) > 5f)
     {
         return;
     }
     if (_marker.Exists)
     {
         _marker.Stop();
     }
     _marker = new Marker(_station.Position, Color.Yellow, Marker.MarkerTypes.MarkerTypeUpsideDownCone, true, true,
                          true);
     SwapStages(CloseToComputer, AtComputer);
 }
        private void CheckIfAtScene() //1.
        {
            if (!CsiCreator.FirstOfficer.Ped.Exists())
            {
                return;
            }

            if (!_rancheck && Game.LocalPlayer.Character.Position.DistanceTo(CsiCreator.FirstOfficer.Ped.Position) < 25f)
            {
                _rancheck = true;
                var markerPos = new Vector3(CsiCreator.FirstOfficer.Spawn.X, CsiCreator.FirstOfficer.Spawn.Y, (CsiCreator.FirstOfficer.Spawn.Z + 1.6f));
                _foMarker         = new Marker(markerPos, Color.LightBlue);
                FoDialog.Position = CsiCreator.FirstOfficer.Ped.Position;
                "Arrived at scene".AddLog();

                Functions.PlayScannerAudioUsingPosition("ATTENTION_ALL_UNITS_05 OFFICERS_AT_SCENE NO_FURTHER_UNITS CRIME_AMBULANCE_REQUESTED_02", CsiCreator.Victim.Position);

                Game.DisplayHelp("Talk to the ~b~First Officer~w~ at scene to receive a preliminary report.");
                if (_emsdispatched == false)
                {
                    _emsdispatched = true;
                    if (_betteremsSupport)
                    {
                        //ApiWrapper.RequestEms(CsiCreator.EmsLast, CsiCreator.EmsQueue);
                        ("BetterEMS Transport = " + _emstransport).AddLog();
                        var surviveprob = _emstransport ? 1f : 0f;

                        ApiWrapper.SetVictimData(CsiCreator.Victim.Ped, _vicData.BruiseLocation, "Cause: Sexual Assault", surviveprob);
                    }
                    else
                    {
                        CreateServices(ServiceType.Ems);
                        GameFiber.Sleep(0500);
                        ("LtFlashEMS Called; EMT exists: " + _ems.PedWorker.Exists()).AddLog();
                    }
                    "~g~EMS~w~ Dispatched".DisplayNotification("EMS requested by the first officer", _caseData.Number);
                }
            }

            if (!(Game.LocalPlayer.Character.Position.DistanceTo(CsiCreator.FirstOfficer.Ped.Position) < 3f))
            {
                return;
            }

            if (!_foNotified)
            {
                _foNotified = true;
                heading     = CsiCreator.FirstOfficer.Heading;
                Game.DisplayHelp("Press ~y~Y~w~ to speak to the First Officer");
                _foMarker.Stop();
            }
            if (Game.IsKeyDown(Keys.Y) && !FoDialog.IsRunning)
            {
                _missionValue = _missionValue + 5;
                $"Mission value changed to: {_missionValue}".AddLog();
                FoDialog.StartDialog();
                _caseData.SajrsUpdates.Add("Obtained report from First Officer");
            }

            if (!FoDialog.HasEnded)
            {
                return;
            }

            "First Officer Collected".AddLog();

            "Sexual Assault Case Update".DisplayNotification("First Officer Conversation \nAdded to ~b~SAJRS", _caseData.Number);
            Game.DisplayHelp("Now that you have checked with the first officer, investigate the crime scene.");

            CsiCreator.FirstOfficer.Ped.Heading = heading;
            GameFiber.Sleep(0500);
            CsiCreator.FirstOfficer.Ped.Tasks.PlayAnimation("amb@code_human_police_crowd_control@idle_b", "idle_d", 4, AnimationFlags.Loop);

            SwapStages(CheckIfAtScene, Finished_FO);
        }
        private void MarkerRun()
        {
            if (_playerPos.DistanceTo(_station.Position) > 30f)
            {
                return;
            }
            if (_playerPos.DistanceTo(_station.Position) <= 5f)
            {
                SwapStages(MarkerRun, CloseToComputer);
            }
            switch (_markNum)
            {
            case 1:
                _marker = new Marker(_markerPos[0], Color.Yellow, Marker.MarkerTypes.MarkerTypeUpsideDownCone, true, true,
                                     true);
                "1".AddLog();
                _markNum++;
                break;

            case 2:
                if (_playerPos.DistanceTo(_markerPos[0]) > 1.5f)
                {
                    break;
                }
                "2".AddLog();
                if (_marker.Exists)
                {
                    _marker.Position = _markerPos[1];
                }
                _markNum++;
                break;

            case 3:
                if (_playerPos.DistanceTo(_markerPos[1]) > 1.5f)
                {
                    break;
                }
                "3".AddLog();
                if (_marker.Exists)
                {
                    _marker.Position = _markerPos[2];
                }
                _markNum++;
                break;

            case 4:
                if (_playerPos.DistanceTo(_markerPos[2]) > 1.5f)
                {
                    break;
                }
                "4".AddLog();
                if (_marker.Exists)
                {
                    _marker.Position = _markerPos[3];
                }
                _markNum++;
                break;

            case 5:
                if (_playerPos.DistanceTo(_markerPos[3]) > 1.5f)
                {
                    break;
                }
                "5".AddLog();
                _markNum++;
                break;

            default:
                "Swapping".AddLog();
                SwapStages(MarkerRun, CloseToComputer);
                break;
            }
        }