Beispiel #1
0
    /// <summary>
    /// Método que se ejecuta en el servidor y es llamado por el delgado "CheckTimersDelegate"
    /// que actualiza la cuenta atrás en los clientes
    /// </summary>
    /// <param name="s">Tiempo actual de juego (Time.time)</param>
    public void TimerCountDown(float s)
    {
        float elapsedTime = s - timersStartTime[0];

        if (elapsedTime >= 0 && elapsedTime < 1)
        {
            RpcStartCountDown("3!", timersStartTime[0]);
        }
        else if (elapsedTime >= 1 && elapsedTime < 2)
        {
            RpcStartCountDown("2!", timersStartTime[0]);
        }
        else if (elapsedTime >= 2 && elapsedTime < 3)
        {
            RpcStartCountDown("1!", timersStartTime[0]);
        }
        else if (elapsedTime >= 3 && elapsedTime < 4)
        {
            // Cuando acaba la cuenta atrás se inician los tiempos de los jugadores y se les da el control
            RpcStartCountDown("GO!", timersStartTime[0]);
            if (isServerOnly)
            {
                for (int i = 0; i < m_Players.Count; i++)
                {
                    m_Players[i].StartTime  = timersStartTime[0] + 3; // Se suma 3 por los 3 segundos de cuenta atrás
                    m_Players[i].LapTime    = timersStartTime[0] + 3; // Se suma 3 por los 3 segundos de cuenta atrás
                    m_Players[i].FinishTime = timersStartTime[0] + 3; // Se suma 3 por los 3 segundos de cuenta atrás
                    m_Players[i].gameObject.GetComponent <SetupPlayer>().StartPlayer();
                }
            }
        }
        else
        {
            // Cuando acaba la cuenta atrás, se oculta el texto y se elimina la referencia del delegado,
            // para no seguir comprobando el temporizador
            RpcStartCountDown("", timersStartTime[0]);
            CheckTimerDelegate -= TimerCountDown;
            timersStartTime.RemoveAt(0);
        }
    }
Beispiel #2
0
    /// <summary>
    /// Command, llamado desde la clase SetupPlayer para notificar que hay un nuevo jugador listo
    /// </summary>
    /// <param name="player">Jugador que está listo</param>
    public void NewPlayerReady(GameObject player)
    {
        // Mutex que evita que se añada un nuevo jugador mientras se aumentan los jugadores listos
        mutex.WaitOne();
        PlayerInfo playerInfo = player.GetComponent <PlayerInfo>();

        playerInfo.IsReadyToStart = true;
        numPlayersReady++;

        if (!gameStarted)
        {
            // Si todos los jugadores están listos, el servidor inicia la cuenta atrás
            if ((numPlayersReady == numPlayers) && (numPlayers >= minPlayers))
            {
                gameStarted = true;
                if (isServer)
                {
                    timersStartTime.Add(Time.time);
                    CheckTimerDelegate += TimerCountDown;
                }
            }
        }
        mutex.ReleaseMutex();
    }