Simple script that uses a property to sync a start time for a multiplayer game.
When entering a room, the first player will store the synchronized timestamp. You can't set the room's synchronized time in CreateRoom, because the clock on the Master Server and those on the Game Servers are not in sync. We use many servers and each has it's own timer. Everyone else will join the room and check the property to calculate how much time passed since start. You can start a new round whenever you like. Based on this, you should be able to implement a synchronized timer for turns between players.
Inheritance: MonoBehaviour
Example #1
0
    // Start is called before the first frame update
    void Start()
    {
        rigidbody = GetComponent <Rigidbody>();

        raceTimer = FindObjectOfType <RaceTimer>();
        countdown = FindObjectOfType <Countdown>();
    }
Example #2
0
    // Start is called before the first frame update
    void Start()
    {
        raceTimer = FindObjectOfType <RaceTimer>();

        text         = GetComponent <TextMeshProUGUI>();
        text.enabled = false;
    }
Example #3
0
    private void SetupElements()
    {
        if (gameType == "Competition")
        {
            timer.timerText.enabled = false;
            timer.oldTime.enabled   = false;
            GameObject.FindGameObjectWithTag("BestTimeLabel").GetComponent <Text>().text = "";
        }
        else if (gameType == "TimeTrial")
        {
            for (int i = 1; i < cars.Length; i++)
            {
                cars[i].carTransform.gameObject.SetActive(false); //Disable all but player 1
                cars[i].wrongWayIndicator.SetActive(false);
                cars[i].lapCounter.text        = "";
                cars[i].movementIndicator.text = "";
            }
            if (!File.Exists("BestTime.txt"))
            {
                File.Create("BestTime.txt");
                oldTimer = null;
            }
            else
            {
                oldTimer = RaceTimer.GetOldBestTime();
            }

            MenuManager.startFromTimeTrial = true;
        }
    }
Example #4
0
    // Update is called once per frame
    void FixedUpdate()
    {
        timeLeft -= Time.fixedDeltaTime;

        if (timeLeft > 0.0f)
        {
            text.text = "" + Mathf.CeilToInt(timeLeft);
        }
        else if (timeLeft > -goTextDuration)
        {
            if (timeLeft > -Time.fixedDeltaTime)
            {
                RaceTimer timer = FindObjectOfType <RaceTimer>();
                timer.started = true;
                //player.enabled = true;
                ghostRec.enabled = true;
            }

            text.text = goText;
        }
        else
        {
            text.enabled = false;
        }
    }
Example #5
0
 // Use this for initialization
 void Start()
 {
     textComponent         = GetComponent <Text>();
     textComponent.enabled = false;
     if (RaceTimerObject != null)
     {
         raceTimer = RaceTimerObject.GetComponent <RaceTimer>();
     }
 }
 // Use this for initialization
 void Start()
 {
     player = GameObject.FindGameObjectWithTag("Player");
     if (FinishUIObject != null)
     {
         finishUI = FinishUIObject.GetComponent <FinishUI>();
     }
     if (RaceTimerObject != null)
     {
         raceTimer = RaceTimerObject.GetComponent <RaceTimer>();
     }
     ResetPosition();
 }
    private void Awake()
    {
        lives = 3;

        Animation = GetComponent <Animator>();
        rb        = Player.GetComponent <Rigidbody2D>();
        Timer     = GameObject.Find("Timer").GetComponent <RaceTimer>();

        Instructions.SetActive(true);
        CountDownAnimation.SetActive(false);
        Player.GetComponent <PacuJawiMovement>().enabled = false;
        Timer.enabled = false;
    }
        private void raceButton_Click(object sender, EventArgs e)
        {
            //Trucks take starting position
            TruckArray[0].TrucksStartingPosition();
            TruckArray[1].TrucksStartingPosition();
            TruckArray[2].TrucksStartingPosition();
            TruckArray[3].TrucksStartingPosition();

            //disable race button till the end of the race
            bettingParlor.Enabled = false;

            //start timer
            RaceTimer.Start();
        }
Example #9
0
    //--------------------------------------
    // Initialization
    //--------------------------------------
    void Start()
    {
        Debug.Log ("creating RaceTimer");

        _Instance = this;

        if (TimerLabel == null) {
            TimerLabel = GetComponent<UnityEngine.UI.Text>();
        }
        TimerLabel.text = GetTimeFormated ();
        //StartTimer();
        RS_GamePlayController.Instance.OnLevelStartedAction += HandleOnLevelStartedAction;
        RS_GamePlayController.Instance.OnLevelFinishedAction += HandleOnLevelFinishedAction;
    }
Example #10
0
 private void RaceTimer_Tick(object sender, EventArgs e)
 {
     for (int i = 0; i < Data.jet.Length; i++)
     {
         Data.jet[Data.rand.Next(0, 4)].isAccelerating();
         if (Data.jet[i].isAccelerating())
         {
             RaceTimer.Stop();
             RaceTimer.Enabled = false;
             StartRace.Enabled = true;
             announceWinner(i + 1);
         }
     }
 }
Example #11
0
    // Start is called before the first frame update
    void Start()
    {
        Checkpoint[] checkpoints = FindObjectsOfType <Checkpoint>();

        foreach (Checkpoint cp in checkpoints)
        {
            if (cp.checkpointNumber > lastCheckpoint)
            {
                lastCheckpoint = cp.checkpointNumber;
            }
        }

        raceTimer = FindObjectOfType <RaceTimer>();
        counter   = FindObjectOfType <CheckpointCounter>();
    }
Example #12
0
    public static void CheckAndSetBetterTime(RaceTimer newTime)
    {/*
      * if (newTime < timers[SceneManager.GetActiveScene().buildIndex])
      * {
      *     timers[SceneManager.GetActiveScene().buildIndex] = newTime;
      * }
      */
        switch (SceneManager.GetActiveScene().buildIndex)
        {
        case 1:
            if (newTime < firstTime)
            {
                firstTime = newTime;
            }
            break;

        case 2:
            if (newTime < secondTime)
            {
                secondTime = newTime;
            }
            break;

        case 3:
            if (newTime < thirdTime)
            {
                thirdTime = newTime;
            }
            break;

        case 4:
            if (newTime < fourthTime)
            {
                fourthTime = newTime;
            }
            break;

        case 5:
            if (newTime < fifthTime)
            {
                fifthTime = newTime;
            }
            break;
        }
    }
Example #13
0
    //Se ha implementado un sistema de checkpoints para asegurar que las vueltas al circuito se realizan correctamente
    //Cuando un jugador local toca un checkpoint, se activa el siguiente, hasta llegar a la meta.
    //Cuando el jugador ha pasado por todos los checkpoints y toca la meta se contabiliza una vuelta
    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player" && other.GetComponent <SetupPlayer>().isLocalPlayer)
        {
            PlayerInfo  playerInfo  = other.GetComponent <PlayerInfo>();
            SetupPlayer setupPlayer = other.GetComponent <SetupPlayer>();
            RaceTimer   raceTimer   = other.GetComponent <RaceTimer>();

            if (isGoal)
            {
                setupPlayer.CmdChangeCurrentLap(playerInfo.CurrentLap + 1);
                raceTimer.ResetLapTime();
            }

            nextCheckpoint.gameObject.SetActive(true);
            gameObject.SetActive(false);
        }
    }
Example #14
0
    public RaceTimer ConvertToRaceTimer(string time)
    {
        int       num      = System.Convert.ToInt32(time);
        RaceTimer raceTime = new RaceTimer();

        raceTime.hours   = 0;
        raceTime.minutes = 0;
        raceTime.seconds = 0;

        while (num % 3600 == 0)
        {
            num -= 3600;
            raceTime.hours++;
        }
        while (num % 60 == 0)
        {
            num -= 60;
            raceTime.minutes++;
        }
        raceTime.seconds = num;

        return(raceTime);
    }
Example #15
0
    private void Start()
    {
        timer = gameObject.GetComponent <RaceTimer>();


        if (!File.Exists("GameMode.txt"))
        {
            File.Create("GameMode.txt");
        }
        using (StreamReader streamReader = new StreamReader("GameMode.txt"))
        {
            gameType = streamReader.ReadLine();
        }

        for (int i = 0; i < cars.Length; i++)
        {
            UpdateLapCounter(i);

            cars[i].wrongWayIndicator.SetActive(false);
            cars[i].lastSeenCheckpoint = StartCheckpoint;
        }
        allCheckpoints = FindObjectsOfType <Checkpoint>();

        CreateCircuit();



        winText.enabled = false;

        visualTotalLaps.text = totalLaps.ToString();
        SetupElements();

        StopAllCoroutines();

        GameObject.FindGameObjectWithTag("Music").GetComponent <MusicManager>().PlayMusic(SceneManager.GetActiveScene());
        coro = StartCoroutine(CountdownTimer(3f));
    }
        private void RaceTimer_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i <= 3; i++)
            {
                if (TruckArray[i].TruckRace())
                {
                    RaceTimer.Stop();
                    bettingParlor.Enabled = true;
                    i++;
                    MessageBox.Show("Truck " + i + " won the race");
                    for (int j = 0; j <= 2; j++)
                    {
                        PuntersArray[j].Collect(i);
                        PuntersArray[j].ClearTheBet();
                    }

                    foreach (Truck Truck in TruckArray)
                    {
                        Truck.TrucksStartingPosition();
                    }
                    break;
                }
            }
        }
Example #17
0
    private void DisplayTime(RaceTimer timeToDisplay, Text textToDisplayIn, string timerType)
    {
        bool compare;

        if (timeToDisplay != null)
        {
            if (timerType == "New")
            {
                compare = (timeToDisplay != null);
            }
            else
            {
                compare = (timeToDisplay == null);
            }
            if (compare)
            {
                textToDisplayIn.text = $"{timeToDisplay.hours}:{timeToDisplay.minutes}:{(int)timeToDisplay.seconds}";
            }
        }
        else
        {
            textToDisplayIn.text = "First time";
        }
    }
Example #18
0
    // Start is called before the first frame update
    //static Dictionary<int, RaceTimer> timers = new Dictionary<int, RaceTimer>(); //Handles all timers
    private void Start()
    {
        using (StreamReader strm = new StreamReader("BestTime.txt"))
        {
            while (!strm.EndOfStream)
            {
                string val = strm.ReadLine();
                Debug.Log("TestRace");
                if (val.Contains("FirstTime"))
                {
                    Debug.Log("TestRace2");
                    string[] first = val.Split();
                    firstTime = ConvertToRaceTimer(first[1]);
                }
                if (val.Contains("SecondTime"))
                {
                    string[] second = val.Split();
                    secondTime = ConvertToRaceTimer(second[1]);
                }
                if (val.Contains("ThirdTime"))
                {
                    string[] third = val.Split();
                    thirdTime = ConvertToRaceTimer(third[1]);
                }
                if (val.Contains("FourthTime"))
                {
                    string[] fourth = val.Split();
                    fourthTime = ConvertToRaceTimer(fourth[1]);
                }
                if (val.Contains("FifthTime"))
                {
                    string[] fifth = val.Split();
                    fifthTime = ConvertToRaceTimer(fifth[1]);
                }
            }
        }
        Debug.Log("TestRace3");

        switch (SceneManager.GetActiveScene().buildIndex)
        {
        case 1:
            DisplayTime(firstTime, oldTime, "old");
            break;

        case 2:
            DisplayTime(secondTime, oldTime, "old");
            break;

        case 3:
            DisplayTime(thirdTime, oldTime, "old");
            break;

        case 4:
            DisplayTime(fourthTime, oldTime, "old");
            break;

        case 5:
            DisplayTime(fifthTime, oldTime, "old");
            break;
        }
    }
Example #19
0
    void Start()
    {
        rectTransform        = GetComponent <RectTransform>();
        spoorManager         = GetComponent <SpoorManager3D>();
        okButtonRace         = FindObjectOfType <OkButtonRace>();
        communicationManager = FindObjectOfType <CommunicationManager>();
        leaderBoard          = FindObjectOfType <LeaderBoard>();

        storageManager       = GameObject.FindGameObjectWithTag("StorageManager");
        storageManagerScript = storageManager.GetComponent <StorageManager>();

        //Vraag de naam van de spelers, het aantal spelers en de mapData aan de StorageManager
        playerNames   = new List <string>(storageManagerScript.activePlayers.Keys);
        aantalSpelers = playerNames.Count;
        mapData       = storageManagerScript.mapData;

        //Instantieer de map en geef deze de juiste waardes
        map = Instantiate(mapData.mapPrefab);
        map.transform.position   = mapData.mapPosition;
        map.transform.rotation   = Quaternion.Euler(mapData.mapRotation);
        map.transform.localScale = mapData.mapScale;

        //Geef de juiste waardes aan de Camera
        mainCamera = Camera.main;
        mainCamera.transform.position = mapData.cameraPosition;
        mainCamera.transform.rotation = Quaternion.Euler(mapData.cameraRotation);
        mainCamera.fieldOfView        = mapData.cameraFOV;

        //Geef de juiste waardes aan het plain
        plain = gameObject;
        plain.transform.position   = mapData.planePosition;
        plain.transform.rotation   = Quaternion.Euler(mapData.planeRotation);
        plain.transform.localScale = mapData.planeScale;

        //Geef de juiste waardes aan het spoor
        spoorManager.scale = mapData.absoluteScale;
        spoorManager.PrepareTrack();

        //Geef de juiste waardes aan het light
        light = FindObjectOfType <Light>().gameObject;
        light.transform.rotation = Quaternion.Euler(mapData.lightRotation);

        //Voeg de mogelijke spelerkleuren toe aan een lijst
        orderedColorAnimationPrefabs.Add(yellowBikerPrefab);
        orderedColorAnimationPrefabs.Add(greenBikerPrefab);
        orderedColorAnimationPrefabs.Add(orangeBikerPrefab);
        orderedColorAnimationPrefabs.Add(pinkBikerPrefab);
        orderedColorAnimationPrefabs.Add(redBikerPrefab);
        orderedColorAnimationPrefabs.Add(blackBikerPrefab);

        //Instantieer alle spelers
        for (int index = 0; index < aantalSpelers; index++)
        {
            //Instantieer de speler en geef zijn Player script de informatie over deze speler
            GameObject spelerClone      = Instantiate(speler, spoor.transform);
            Player     spelerCloneFiets = spelerClone.GetComponent <Player>();
            spelerCloneFiets.fietsnummer = index + 1;
            spelerCloneFiets.naam        = playerNames[index];
            spelerCloneFiets.spelerMassa = 75;

            playerObjects.Add(spelerClone);
            orderedPlayers.Add(spelerCloneFiets);

            //Geef de speler zijn kleur, positie en schaal
            playerColors.Add(playerNames[index], colorOptions[index]);
            GameObject playerAnimation = Instantiate(orderedColorAnimationPrefabs[index], spelerClone.transform);
            playerAnimation.transform.localRotation = Quaternion.Euler(playerRotation);
            playerAnimation.transform.localPosition = playerPosition;
            playerAnimation.transform.localScale    = playerScale;

            //Activeer de fiets in de Arduino en geef hem het geselecteerde vermogen
            communicationManager.SendPort(4, index + 1, 1);
            communicationManager.SendPort(6, index + 1, storageManagerScript.activePlayers[playerNames[index]]);

            //Creer een subdisplay voor de speler op het leaderboard
            leaderBoard.InstantiateSubdisplay();
        }

        //Instantieer de timer die aftelt naar het begin van de race
        timer       = Instantiate(timerPrefab, FindObjectOfType <Canvas>().transform);
        timerScript = timer.GetComponent <RaceTimer>();
    }
Example #20
0
 private void StartRace_Click(object sender, EventArgs e)
 {
     RaceTimer.Start();
     StartRace.Enabled = false;
 }
Example #21
0
    private void Update()
    {
        Debug.Log(QualitySettings.pixelLightCount);
        //Debug.Log(1.0 / Time.deltaTime); //FPS
        for (int i = 0; i < cars.Length; i++)
        {
            cars[i].nearestCheckpoint = NearestCheckpoint(i);
        }

        if (!isLevelWon)
        {
            for (int i = 0; i < cars.Length; i++)
            {
                if (cars[i].lapsComplete == totalLaps) //Doesn't run when isLevelWon is set to true in this condition
                {
                    isLevelWon = true;

                    Vehicle.Player winningVehicle = cars[i].carTransform.GetComponent <Vehicle>().vehiclesPlayer;
                    winText.enabled = true;
                    if (gameType == "Competition" || gameType == null)
                    {
                        winText.text = ($"Player {i + 1} wins!");
                        SavePlayerData(winningVehicle); //Saves data to a file
                        CompetitionWinner.AddPointTo(i);
                    }
                    else if (gameType == "TimeTrial")
                    {
                        winText.text = "You finished!";
                        timer.StopTimer();

                        RaceTimer.CheckAndSetBetterTime(timer);
                        RaceTimer.SaveTimes();
                    }
                    StartCoroutine(LoadSceneAfterWait(3f));
                    if (gameType == "TimeTrial")
                    {
                        GameObject.FindGameObjectWithTag("Music").GetComponent <MusicManager>().StopMusic();
                    }
                }
            }
            for (int i = 0; i < cars.Length; i++)
            {
                if (cars[i].nearestCheckpoint == null)
                {
                    Debug.Log("Test");
                    return;
                }
                if (cars[i].nearestCheckpoint.index == cars[i].lastSeenCheckpoint.index)
                {
                }
                else if (cars[i].nearestCheckpoint.index > cars[i].lastSeenCheckpoint.index)
                {
                    Debug.Log("test...");
                    var distance = cars[i].nearestCheckpoint.index - cars[i].lastSeenCheckpoint.index;

                    if (distance > longestPermittedShortcut + 1)
                    {
                        cars[i].wrongWayIndicator.SetActive(true);
                    }
                    else
                    {
                        cars[i].lastSeenCheckpoint = cars[i].nearestCheckpoint;

                        cars[i].wrongWayIndicator.SetActive(false);
                    }
                }
                else if (cars[i].nearestCheckpoint.isLapStart && cars[i].lastSeenCheckpoint.next.isLapStart)
                {
                    Debug.Log("Test!");
                    cars[i].lastSeenCheckpoint = cars[i].nearestCheckpoint;

                    cars[i].lapsComplete += 1;
                    UpdateLapCounter(i);
                }
                else
                {
                    //Checkpoint is lower than the last one, player is going the wrong way
                    cars[i].wrongWayIndicator.SetActive(true);
                }
            }
        }
    }
Example #22
0
 private void Start()
 {
     Timer = GameObject.Find("Timer").GetComponent <RaceTimer>();
     gd    = GameObject.Find("GameManager").GetComponent <PJGlobalData>();
 }