private void DisableScroll(float delay = 0f) { if (_navigation.IsTweening) { return; } _scrollEnabled = false; var puzzleScale = _levels[_selectedLevel].GetComponent <PuzzleScale>(); var puzzleState = _levels[_selectedLevel].GetComponent <PuzzleState>(); _navigation.Show(); _moveDisplay.UpdateText(puzzleState.NumMoves, puzzleState.MovesBestScore, true, true); var level = _levels[_selectedLevel]; level.GetComponentInChildren <PuzzleInfo>().Hide(); var prevLevel = _levels.ElementAtOrDefault(_selectedLevel - 1); var nextLevel = _levels.ElementAtOrDefault(_selectedLevel + 1); prevLevel?.GetComponent <PuzzleState>()?.DestroyBoard(false); nextLevel?.GetComponent <PuzzleState>()?.DestroyBoard(false); prevLevel?.GetComponentInChildren <PuzzleInfo>()?.Hide(); nextLevel?.GetComponentInChildren <PuzzleInfo>()?.Hide(); puzzleScale.PuzzleInit += OnPuzzleInit; level.GetComponent <BoardAction>().PuzzleWin += OnPuzzleWin; puzzleState.LevelStateChanged += OnLevelStateChanged; puzzleState.BoardEnabled = true; level.GetComponent <PuzzleView>().ResumeView(); CameraScript.FitToDimensions( puzzleScale.Dimensions, puzzleScale.Margin, CameraZoomTime, LeanTweenType.easeInSine ); var bounds = _levelBounds[_selectedLevel]; var mid = (bounds.Item1 + bounds.Item2) / 2f; // TODO: make configurable const float time = 0.5f; LeanTween.moveLocal(gameObject, Vector3.up * mid, time) .setEase(LeanTweenType.easeInOutSine) .setDelay(delay); Levels.SaveLevel(puzzleState.LevelState()); }