예제 #1
0
    public void SetUpRaceManager(RaceMode raceMode)
    {
        m_raceMode = raceMode;

        switch (raceMode)
        {
        case RaceMode.Solo:
        case RaceMode.SoloIA:
        case RaceMode.TimeAttack:
            m_carCount = 1;
            break;

        case RaceMode.VS1:
            m_carCount = 2;
            break;

        case RaceMode.VSN:
            m_carCount = 4;
            break;
        }

        SetUpInitialPositions();
        SetUpCars();
        SetUpPlayers();
        SetUpCamera();
        SetRaceCamera();

        m_uiDisplayer = Instantiate(m_uiPrefab, m_race.transform).GetComponent <UIDisplayer>();
    }
예제 #2
0
        public bool CheckRaceOver(CarState[] states, RaceMode mode)
        {
            if (hasSentObject)
            {
                return(true);
            }

            // Test mode is an endless race.
            if (mode == RaceMode.Test)
            {
                return(false);
            }

            // The race is over only if all cars have finished the race or have
            // stopped, either because of a bad script or if the car has flipped over.
            bool isRaceOver = true;

            foreach (CarState car in states)
            {
                isRaceOver &= finishedCars.Contains(car.name) || car.HasCarStopped;
            }

            if (isRaceOver)
            {
                Send(states, mode);
            }

            return(isRaceOver);
        }
        private unsafe byte TitleSequenceImpl()
        {
            var task = (Task <TitleSequence, TitleSequenceTaskState> *)(*State.CurrentTask);

            _mode = task->TaskData->RaceMode;
            return(_titleHook.OriginalFunction());
        }
예제 #4
0
        private void Redirect(RaceMode mode, string queryParams)
        {
            string leaderboardUrl = GetURL() + ((mode == RaceMode.Multiplayer)
                ? "results" : "tournament/next") + queryParams;

            Debug.Log("Redirecting to \"" + leaderboardUrl + "\" . . . ");
            Application.OpenURL(leaderboardUrl);
        }
예제 #5
0
        private void Send(CarState[] states, RaceMode mode)
        {
            if (hasSentObject)
            {
                return;
            }

            hasSentObject = true; // This function may only be called once.

            string[] carNames = new string[states.Length];
            int      index    = 0;

            Debug.Log("Race has finished!");

            // Add the cars which have finished the race to the top of the list.
            while (carsFinishedQueue.Count > 0)
            {
                Debug.Log("Finished with position " + index + ": " + carsFinishedQueue.Peek());
                carNames[index++] = carsFinishedQueue.Dequeue();
            }

            // Add the remaining cars.
            foreach (CarState car in states)
            {
                if (!finishedCars.Contains(car.name))
                {
                    Debug.Log("Stalled with position " + car.position + ": " + car.name);
                    carNames[car.position] = car.name;
                }
            }

            // Finally, create the form and set the previous query params.
            WWWForm form = new WWWForm();

            form.AddField("players", states.Length);
            string queryParams = "";

            for (int i = 0; i < states.Length; i++)
            {
                form.AddField(i.ToString(), carNames[i]);

                queryParams += (i == 0) ? "?" : "&";
                queryParams += "previous[" + (char)('A' + i) + "]=" + WWW.EscapeURL(carNames[i]);
            }

            if (mode == RaceMode.Tournament)
            {
                outerClass.StartCoroutine(WaitForSend(form));
            }

            Redirect(mode, queryParams);
        }
예제 #6
0
 private void SetMode(RaceMode mode)
 {
     if (raceMode != RaceMode.Test)
     {
         Debug.LogWarning("Mode has already been changed to " + raceMode
                          + " this call will be ignored.");
         // TODO: Check if this will always fail.
         //} else if (carManager.IsRaceStarted) {
         //    Debug.LogWarning("The call is too late! The race has already started.");
     }
     else
     {
         raceMode = mode;
     }
 }
예제 #7
0
 public RaceObservable(RaceMode raceMode, params IObservable <T>[] observables)
 {
     //_raceMode = raceMode;
     _observables = observables;
 }
예제 #8
0
 public static IObservable <T> Race <T>(RaceMode mode, params IObservable <T>[] observables)
 {
     return(new RaceObservable <T>(mode, observables));
 }