/// <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;
            }
        }
    }
Exemple #2
0
 void Awake()
 {
     Instance = this;
     if (Players.Count != 0)
     {
         Players.Clear();
     }
 }
Exemple #3
0
 void Start()
 {
     playerAudio  = GetComponent <AudioSource>();
     saludActual  = saludInicial;
     estaMuerto   = false;
     playersAlive = GameObject.Find("World").GetComponent <PlayersAlive>();
     playerMov    = GetComponent <PlayerMov>();
 }
Exemple #4
0
 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();
    }