private InterrogationLine.Type WaitForPlayersResponse(InterrogationLine.Type correctType)
        {
            while (true)
            {
                GameFiber.Yield();

                if (Game.IsKeyDown(KeyTruth))
                {
                    Game.HideHelp();
                    PlayAnswerSound(correctType == InterrogationLine.Type.Truth);
                    return(InterrogationLine.Type.Truth);
                }
                else if (Game.IsKeyDown(KeyDoubt))
                {
                    Game.HideHelp();
                    PlayAnswerSound(correctType == InterrogationLine.Type.Doubt);
                    return(InterrogationLine.Type.Doubt);
                }
                else if (Game.IsKeyDown(KeyLie))
                {
                    Game.HideHelp();
                    PlayAnswerSound(correctType == InterrogationLine.Type.Lie);
                    return(InterrogationLine.Type.Lie);
                }
            }
        }
 private static void PlayInterrogeeFacialAnim(InterrogationLine.Type t, Ped interrogee)
 {
     if (t == InterrogationLine.Type.Truth)
     {
         interrogee.Tasks.PlayAnimation("gestures@m@standing@casual", "gesture_pleased", 4f, AnimationFlags.Loop);
     }
     else if (t == InterrogationLine.Type.Doubt)
     {
         interrogee.Tasks.PlayAnimation("facials@gen_male@variations@injured", "mood_injured_3", 4f, AnimationFlags.Loop);
     }
     else if (t == InterrogationLine.Type.Lie)
     {
         interrogee.Tasks.PlayAnimation("facials@p_m_two@variations@injured", "mood_injured_3", 4f, AnimationFlags.Loop);
     }
 }
        private void ProcessLines()
        {
            while (Dist(Interrogator, Interrogee) > DistanceToStart)
            {
                GameFiber.Yield();
            }

            Interrogator.KeepTasks = true;
            Interrogee.KeepTasks   = true;
            NativeFunction.Natives.TASK_TURN_PED_TO_FACE_ENTITY(Game.LocalPlayer.Character, Interrogee, -1);
            NativeFunction.Natives.TASK_TURN_PED_TO_FACE_ENTITY(Interrogee, Game.LocalPlayer.Character, -1);

            GameFiber.Sleep(1000);

            _playerTOsus = CreatePointingCam(Interrogator, Interrogee);

            _susTOplayer = CreatePointingCam(Interrogee, Interrogator);

            Interrogator.IsPositionFrozen = true;

            Interrogee.IsPositionFrozen = true;

            _gameCam = CreateGameCam();

            NativeFunction.Natives.SET_PED_CAN_SWITCH_WEAPON(Interrogator, false);

            while (true)
            {
                GameFiber.Yield();

                if (_lines[_currentLine].LineType != _lineTypeCheck)
                {
                    _currentLine++;
                    continue;
                }

                Game.DisplayHelp("Press ~y~" + InteractKey.ToString() + "~w~ to continue the interrogation.");

                while (true)
                {
                    GameFiber.Yield();
                    if (!Game.IsKeyDown(InteractKey))
                    {
                        continue;
                    }

                    Game.HideHelp();
                    break;
                }

                var cl = _lines[_currentLine];

                Interrogee.IsVisible = false;

                PedPlayRndAnim(Interrogator);

                PlayFacialAnim(Interrogator);

                DisplayLineForPed(Interrogator, cl.PlayerLine, _susTOplayer);

                Interrogee.IsVisible   = true;
                Interrogator.IsVisible = false;

                PedPlayRndAnim(Interrogee);

                PlayFacialAnim(Interrogee);

                DisplayLineForPed(Interrogee, cl.PerpLine, _playerTOsus);

                if (cl.LineType == InterrogationLine.Type.Question)
                {
                    PlayInterrogeeFacialAnim(cl.CorrectType, Interrogee);

                    Game.DisplayHelp(Help, true);

                    _lineTypeCheck = WaitForPlayersResponse(cl.CorrectType);
                }
                else
                {
                    _lineTypeCheck = InterrogationLine.Type.Question;
                }

                Interrogee.Tasks.Clear();

                Interrogator.IsVisible = true;

                _currentLine++;

                if (_currentLine == _lines.Length)
                {
                    break;
                }
            }
        }