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); } }
public void Init(KeyCode key, Rob_CharacterController player, Camera camera) { _key = key; _text.text = key.ToString(); _player = player; _camera = camera; LateUpdate(); }
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); }
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); }
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); } }
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()); } }
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); } }
private void HandleOneRemaining(Rob_CharacterController remaining) { ChangeGameState(GameState.Ended); }
public KeyPlayerPair(KeyCode key, Rob_CharacterController player) { Key = key; Player = player; }