/// <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); } }
/// <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(); }