Esempio n. 1
0
    private IEnumerator TrackPlayers()
    {
        while (true)
        {
            int     alive      = 0;
            Vector3 lookTarget = Vector3.zero;
            for (int i = 0; i < _players.Count; i++)
            {
                Rob_CharacterController player = _players[i];
                if (player.transform.position.y > -2f)
                {
                    alive++;
                    lookTarget += player.transform.position;
                }
            }

            if (alive > 0)
            {
                lookTarget /= (float)alive;
                _lookTarget = lookTarget;
            }

            yield return(null);
        }
    }
Esempio n. 2
0
 public void Init(KeyCode key, Rob_CharacterController player, Camera camera)
 {
     _key       = key;
     _text.text = key.ToString();
     _player    = player;
     _camera    = camera;
     LateUpdate();
 }
Esempio n. 3
0
    private void HandlePlayerCreated(KeyCode key, Rob_CharacterController player,
                                     IList <Rob_CharacterController> players)
    {
        PlayerIndicator indicator = Instantiate(_indicatorPrefab, _indicatorParent.transform);

        indicator.Init(key, player, _mainCamera);

        PlayerIndicator mask = Instantiate(_indicatorPrefabMask, _indicatorMaskParent.transform);

        mask.Init(key, player, _mainCamera);
    }
Esempio n. 4
0
    private Rob_CharacterController CreateNewPlayer(KeyCode key)
    {
        Rob_CharacterController newPlayer = Instantiate(_playerPrefab, transform);

        newPlayer.PickRandomSkin();
        Vector2 pos;

        do
        {
            float i = Mathf.Floor(UnityEngine.Random.Range(2f, 23f)) * 2f;
            float j = Mathf.Floor(UnityEngine.Random.Range(2f, 23f)) * 2f;
            pos = new Vector2(i, j);
        } while (_usedPositions.Contains(pos));

        newPlayer.transform.position = new Vector3(pos.x, 0f, pos.y);
        newPlayer.transform.LookAt(_mapCentre);
        _playerDict[key] = newPlayer;
        _playerList.Add(newPlayer);
        _usedPositions.Add(pos);
        return(newPlayer);
    }
Esempio n. 5
0
    private IEnumerator CheckForWin()
    {
        bool moreThanOnePlayerAlive  = true;
        Rob_CharacterController last = _playerList[0];

        while (moreThanOnePlayerAlive)
        {
            int aliveCount = 0;
            for (int i = 0; i < _playerList.Count; i++)
            {
                Rob_CharacterController player = _playerList[i];
                if (!player.gameObject.activeSelf)
                {
                    continue;
                }

                if (player.transform.position.y < -50f)
                {
                    player.gameObject.SetActive(false);
                    continue;
                }

                if (player.transform.position.y < -2f)
                {
                    continue;
                }

                last = player;
                aliveCount++;
            }

            moreThanOnePlayerAlive = aliveCount > 1;
            yield return(_wait);
        }

        if (OnePlayerRemaining != null)
        {
            OnePlayerRemaining.Invoke(last);
        }
    }
Esempio n. 6
0
    private void HandlePlayerCreated(KeyCode key, Rob_CharacterController newPlayer, IList <Rob_CharacterController> playerList)
    {
        _players = playerList;
        Vector3 target = Vector3.zero;

        for (int i = 0; i < playerList.Count; i++)
        {
            Rob_CharacterController player = playerList[i];
            target += player.transform.position;
        }

        target /= (float)playerList.Count;

        _lookTarget = target;

        _queue.Add(new KeyPlayerPair(key, newPlayer));
        if (!_introsActive)
        {
            _introsActive = true;
            StartCoroutine(PlayIntros());
        }
    }
Esempio n. 7
0
    private void HandleStateChanged(GameState newState)
    {
        switch (newState)
        {
        case GameState.Entry:
            break;

        case GameState.PlayerSelect:
            _lookTarget              = _mapCentre;
            _currentLook             = _lookTarget;
            _targetPosition.position = _defaultCameraPos.position;
            _distance    = _defaultCameraPos.position - _mapCentre;
            _rotatePivot = _mapCentre;
            StartCoroutine(SmoothDamp());
            StartCoroutine(Rotate());
            break;

        case GameState.Started:
            StartCoroutine(TrackPlayers());
            break;

        case GameState.Ended:
            for (int i = 0; i < _players.Count; i++)
            {
                Rob_CharacterController player = _players[i];
                if (player.transform.position.y > -2f)
                {
                    _rotatePivot = player.transform.position;
                }
            }

            _distance = new Vector3(0f, 1f, 3f);
            break;

        default:
            throw new ArgumentOutOfRangeException("newState", newState, null);
        }
    }
Esempio n. 8
0
 private void HandleOneRemaining(Rob_CharacterController remaining)
 {
     ChangeGameState(GameState.Ended);
 }
Esempio n. 9
0
 public KeyPlayerPair(KeyCode key, Rob_CharacterController player)
 {
     Key    = key;
     Player = player;
 }