public void StartGame(Player player,
                              RuleSettings selectedRuleset,
                              FtueController ftueController,
                              SessionScript sessionScript,
                              OverlayUISceneActivator overlayUISceneActivator)
        {
            print("[FTUE] Fifth ftue game started ");

            InterfaceController.Instance.Show(GameWindow.OverlayUIScene);
            InterfaceController.Instance.Hide(GameWindow.MainMenu);

            SceneActivationBehaviour <TopBarUIActivator> .Instance.SetButtons(false);

            GameplayScript      gameplay            = sessionScript.CreateGameAndStart(player, selectedRuleset);
            BoardCreationScript boardCreationScript = gameplay.GetComponent <BoardCreationScript>();
            GridLabelManager    gridLabelManager    = boardCreationScript.gameObject.GetComponent <GridLabelManager>();

            InterfaceController.Instance.Show(GameWindow.ToolbarUI);
            SceneActivationBehaviour <ToolbarUIActivator> .Instance.ToolToggle.interactable = false;

            boardCreationScript.BlockAllCells();

            overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_1, true, true, 0, true);

            ftueController.SendFtueProgress("Game5CantTell_31");

            boardCreationScript.HighlightCells(true, GameConstants.Ftue.FifthGame.HighlightCellAnimations.HighlightCells5_1);

            overlayUISceneActivator.SubscribeForFullScreenTap(() =>
            {
                ftueController.SendFtueProgress("ThreeCorrect_32");
                overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_2, true);

                boardCreationScript.HighlightCells(false);

                boardCreationScript.BlockCellsToBeSelected(GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_2);

                ftueController.ListenForCurrentFtueCellSelection(gameplay, GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_2, () =>
                {
                    overlayUISceneActivator.HideFtueMessages();
                }, () =>
                {
                    ftueController.SendFtueProgress("LetsFillThese_33");
                    overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_3, true);

                    boardCreationScript.BlockCellsToBeSelected(GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_3);

                    ftueController.ListenForCurrentFtueCellSelection(gameplay, GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_3, () =>
                    {
                        overlayUISceneActivator.HideFtueMessages();
                    }, () =>
                    {
                        ftueController.SendFtueProgress("FillMore_34");
                        boardCreationScript.BlockCellsToBeSelected(GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_4);

                        ftueController.ListenForCurrentFtueCellSelection(gameplay, GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_4, () =>
                        {
                            //
                        }, () =>
                        {
                            ftueController.SendFtueProgress("XTool_35");

                            overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_5, true);

                            SceneActivationBehaviour <ToolbarUIActivator> .Instance.ShowHandAnimation(true, GameConstants.Ftue.FifthGame.HandAnimations.Hand5_5);

                            overlayUISceneActivator.SubscribeForToolToggleTap(() =>
                            {
                                SceneActivationBehaviour <ToolbarUIActivator> .Instance.ShowHandAnimation(false);
                                SceneActivationBehaviour <ToolbarUIActivator> .Instance.ToggleToCross();
                                ftueController.SendFtueProgress("LetsCrossRow_36");

                                StartCoroutine(ShortWait(() => overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_6, true)));

                                boardCreationScript.HighlightCells(true);
                                gridLabelManager.ShowFtueArrows(new List <int> {
                                    5
                                });

                                boardCreationScript.BlockCellsToBeSelected(GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_6);
                                ftueController.ListenForCurrentFtueCellMarking(gameplay, GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_6, () =>
                                {
                                    ftueController.SendFtueProgress("CoolFewMore_37");
                                    overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_7, true);

                                    gridLabelManager.ShowFtueArrows(new List <int> {
                                        0, 4
                                    });

                                    boardCreationScript.BlockCellsToBeSelected(GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_7);

                                    ftueController.ListenForFirstSpecificMarking(gameplay, () =>
                                    {
                                        gridLabelManager.HideSpecificFtueArrow(0);
                                    });

                                    ftueController.ListenForSecondSpecificMarking(gameplay, () =>
                                    {
                                        gridLabelManager.HideSpecificFtueArrow(4);
                                    });

                                    ftueController.ListenForCurrentFtueCellMarking(gameplay, GameConstants.Ftue.FifthGame.TargetCellVectors.TargetCells5_7, () =>
                                    {
                                        ftueController.SendFtueProgress("RememberTilesNot_38");
                                        overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_8, true, true, 0, true);
                                        boardCreationScript.HighlightCells(false);

                                        overlayUISceneActivator.SubscribeForFullScreenTap(() =>
                                        {
                                            ftueController.SendFtueProgress("SelectMarker_39");
                                            overlayUISceneActivator.ShowFtueGameplayMessage(GameConstants.Ftue.FifthGame.FtueMessages.Instructions5_9, true);
                                            boardCreationScript.HighlightCells(false);

                                            // paint tap animation
                                            SceneActivationBehaviour <ToolbarUIActivator> .Instance.ShowHandAnimation(true, GameConstants.Ftue.FifthGame.HandAnimations.Hand5_9);

                                            overlayUISceneActivator.SubscribeForToolToggleTap(() =>
                                            {
                                                ftueController.SendFtueProgress("StartGame5_40");

                                                SceneActivationBehaviour <ToolbarUIActivator> .Instance.GameFiveToolToggleTap();

                                                overlayUISceneActivator.HideFtueMessages();
                                                overlayUISceneActivator.ftueMessagesPerStage = 0;

                                                gameplay.StartDelayedSession(true);
                                                boardCreationScript.UnblockAllCells();

                                                gameplay.OnPuzzleSolved += gameData =>
                                                {
                                                    int i = int.Parse(gameData.Ruleset.Id);
                                                    ftueController.ProceedToGameOverAward(player, i);

                                                    ftueController.SendFtueProgress("Game5Complete_41");
                                                };
                                            });
                                        });
                                    });
                                });
                            });
                        });
                    });
                });
            });
        }