public void Initialize(GameSettings gameSettings,
                               InputController inputController,
                               LocalStorage.LocalStorage localStorage,
                               SoundController soundController,
                               ISequenceChecker sequenceChecker,
                               IPointsCalculator pointsCalculator)
        {
            _gameSettings    = gameSettings;
            _inputController = inputController;
            _localStorage    = localStorage;
            _soundController = soundController;
            _sequenceChecker = sequenceChecker;

            _pointsCalculator       = pointsCalculator;
            _gemSelectionController = new GemSelectionController(_inputController);
            _gridController         = gameObject.AddComponent <GridController>();
            _gridController.Initialize(_gameGrid, _gameSettings, sequenceChecker);

            _gemSelectionController.OnSelectionComplete.AddListener(
                (first, second) => StartCoroutine(ChangeGemsPosition(first, second)));
            _gemSelectionController.OnSelectionInvalid.AddListener(InvalidMove);
            _gridController.OnSequence.AddListener(CalculatePoints);

            ContextProvider.Context.OnPause.AddListener(Pause);
        }
        public PointsController(LocalStorage.LocalStorage localStorage, GameSettings gameSettings, GameController gameController)
        {
            var level = localStorage.GetLevel();

            Goal = gameSettings.StartGoal + (gameSettings.GoalStep * level);

            _gameController = gameController;
            gameController.OnScoreUpdate.AddListener(CompareToGoal);
        }