/// <summary> /// Update score and handle game logic if a player lost a life. /// </summary> /// <param name="playerNumber">PlayerNumber of player that has lost life.</param> /// <param name="lastCollider">The last collider that player has touched.</param> public void LostLife(int playerNumber, Collider2D lastCollider) { if (Players[playerNumber].GetComponent <DrillCharacterController>().LivesLeft == 0) { PlayersAlive[playerNumber] = false; } else { Players[playerNumber].GetComponent <DrillCharacterController>().Respawn(); } UI.UpdateIngameUI(); // If only one player is left // Award 1 point and check win condition (AddToScore handles that // or finish round. if (PlayersAlive.Count(x => x) == 1) { int i = PlayersAlive.ToList().IndexOf(true); AddToScore(i, 1); if (Score[i] < 3) { CurrentState = GameState.ENDROUND; UI.EndRound(i); Time.timeScale = 0f; } } }
void Awake() { Instance = this; if (Players.Count != 0) { Players.Clear(); } }
void Start() { playerAudio = GetComponent <AudioSource>(); saludActual = saludInicial; estaMuerto = false; playersAlive = GameObject.Find("World").GetComponent <PlayersAlive>(); playerMov = GetComponent <PlayerMov>(); }
void Start() { originalPos = transform.position; playerAudio = GetComponent <AudioSource>(); saludActual = saludInicial; estaMuerto = false; playersAlive = GameObject.Find("World").GetComponent <PlayersAlive>(); playerMov = GetComponent <PlayerMov>(); materialRenderer = GetComponent <MeshRenderer>(); playerOriginalColor = materialRenderer.material.color; }
public override void Update() { if (UnitZ.Hud.AliveText != null) { UnitZ.Hud.AliveText.text = PlayersAlive.ToString() + " Alive"; } if (isServer) { allPlayer = GameObject.FindGameObjectsWithTag("Player"); int alive = 0; int lastplayer = -1; for (int i = 0; i < allPlayer.Length; i++) { if (allPlayer[i] != null) { CharacterSystem player = allPlayer[i].GetComponent <CharacterSystem>(); if (player != null && player.IsAlive) { lastplayer = i; alive += 1; } } } PlayersAlive = alive; if (IsBattleStart && !IsBattleEnded) { if (alive <= 1) { if (lastplayer != -1) { if (allPlayer[lastplayer] != null) { CharacterSystem player = allPlayer[lastplayer].GetComponent <CharacterSystem>(); if (player != null && player.NetID != -1) { PlayerWin(player.connectionToClient); } } } IsBattleEnded = true; } } } if (!IsBattleStart) { if (UnitZ.Hud.CountdownText) { if (CountdownToPlaneSync > 0) { UnitZ.Hud.CountdownText.text = CountdownToPlaneSync.ToString(); } else { UnitZ.Hud.CountdownText.text = ""; } } UnitZ.Hud.BroadcastingText("Battle Starts in", 0.5f); if (isServer) { CountdownToPlaneSync = (int)((timeTmp + CountdownToPlane) - Time.timeSinceLevelLoad); if (Time.timeSinceLevelLoad > timeTmp + CountdownToPlane) { SpawnPlane(false, Vector3.zero); isEscape = false; timeAreaTmp = Time.time; IsBattleStart = true; UnitZ.gameManager.IsBattleStart = true; IsBattleEnded = false; getInThePlane(); } } } else { if (safeArea == null && SafeArea) { safeArea = (GameObject)GameObject.Instantiate(SafeArea.gameObject, Vector3.zero, Quaternion.identity); } if (lastDeadArea == null && DeadArea) { lastDeadArea = (GameObject)GameObject.Instantiate(DeadArea.gameObject, Vector3.zero, Quaternion.identity); } if (lastDeadArea) { lastDeadArea.SetActive(currentArea > 0); } if (safeArea) { safeArea.SetActive(currentArea > 0); } if (isServer) { if (DeadAreas.Length > currentArea) { LerpValue = 0; DeadArea NextArea = DeadAreas[currentArea]; currentAreaDamage = NextArea.Damage; Radius = NextArea.Radius; if (Time.time >= timeAreaTmp + NextArea.Time) { if (!isEscape) { timeEscapeTmp = Time.time; isEscape = true; } float timing = 1 - (((NextArea.EscapeTime + timeEscapeTmp) - Time.time) / NextArea.EscapeTime); if (currentArea > 0) { LerpValue = timing; } if (Time.time > NextArea.EscapeTime + timeEscapeTmp) { if (lastDeadArea) { positionTmp = CentreArea; scaleTmp = new Vector3(Radius, SafeArea.transform.localScale.y, Radius) * 2; } if (currentArea >= DeadAreas.Length - 1) { return; } currentArea += 1; isEscape = false; timeAreaTmp = Time.time; CentreArea = GetArea(CentreArea, Radius - (DeadAreas[currentArea].Radius)); CmdStartNewArea(positionTmp, scaleTmp, currentArea); if (DeadAreas[currentArea].AirDrop) { SpawnPlane(true, CentreArea); } } } else { float timeLeft = (timeAreaTmp + NextArea.Time) - Time.time; if (timeLeft < 60) { if (Time.time >= broadcastTimpTmp + 10) { { Broadcast("Retracting Area in " + Mathf.Ceil(timeLeft) + " second", 3); broadcastTimpTmp = Time.time; } } } } } damageUpdate(); } if (safeArea && lastDeadArea) { safeArea.transform.position = CentreArea; safeArea.transform.localScale = new Vector3(Radius, SafeArea.transform.localScale.y, Radius) * 2; lastDeadArea.transform.position = Vector3.Lerp(positionTmp, safeArea.transform.position, LerpValue); lastDeadArea.transform.localScale = Vector3.Lerp(scaleTmp, safeArea.transform.localScale, LerpValue); } } base.Update(); }