private void Awake()
    {
        _helpScore = new HelpScore(0, _gameSettings.MaximumHelps);
        _scoreChanges.OnNext(_helpScore);

        _countDown = TimeSpan.FromSeconds(_gameSettings.GameDurationSeconds);
        _countDownChanges.OnNext(_countDown);

        _worldChanges.OnNext(_currentWorldStatus);

        _mumblingOwners = new Dictionary <AudioClip, KeyValuePair <HumanController, GhostController> >();

        List <int> randomIndexList = new List <int>();

        for (int i = 0; i < _allMumbles.Length; i++)
        {
            randomIndexList.Add(i);
        }

        var goes           = GameObject.FindGameObjectsWithTag("spawningPositions");
        var spawningPoints = new TupleSpawnPoint[goes.Length];

        for (var index = 0; index < goes.Length; index++)
        {
            var go = goes[index];
            spawningPoints[index] = new TupleSpawnPoint();
            spawningPoints[index].HumanPosition = go.transform.Find("Human").transform;
            spawningPoints[index].GhostPosition = go.transform.Find("Ghost").transform;
        }

        int n = spawningPoints.Length;

        while (n > 1)
        {
            int             k    = UnityEngine.Random.Range(0, n--);
            TupleSpawnPoint temp = spawningPoints[n];
            spawningPoints[n] = spawningPoints[k];
            spawningPoints[k] = temp;
        }

        for (int i = 0; i < _allMumbles.Length; i++)
        {
            var randomIndex = UnityEngine.Random.Range(0, randomIndexList.Count);
            var index       = randomIndexList[randomIndex];
            randomIndexList.RemoveAt(randomIndex);

            if (i >= spawningPoints.Length)
            {
                Debug.LogError("You need as many spawn points as mumble sounds");
                return;
            }

            var mumble     = _allMumbles[index];
            var longMumble = _allLongMumbles[index];
            var ehMumble   = _allEhMumbles[index];

            var positions          = spawningPoints[index];
            var notesConfiguration = GetRandomNotesConfiguration();
            var humanInstance      = Instantiate(_humanControllerPrefab);
            humanInstance.transform.position = positions.HumanPosition.position;
            humanInstance.OnSuccess         += OnHumanSuccess;
            humanInstance.SetNoteConfiguration(notesConfiguration);
            humanInstance.SetMumbling(mumble);
            humanInstance.SetLongMumbling(longMumble);
            humanInstance.SetEhMumble(ehMumble);
            var ghostInstance = Instantiate(_ghostControllerPrefab);
            ghostInstance.transform.position = positions.GhostPosition.position;
            ghostInstance.SetMumbling(mumble);
            ghostInstance.SetNoteConfiguration(notesConfiguration);

            _mumblingOwners[mumble] = new KeyValuePair <HumanController, GhostController>(humanInstance, ghostInstance);
        }
    }
 private void OnScoreChange(HelpScore helpScore)
 {
     _textComp.text = helpScore.ToString();
 }
 public void Rescued()
 {
     _helpScore = new HelpScore(_helpScore.current + 1, _helpScore.max);
     _scoreChanges.OnNext(_helpScore);
 }