Beispiel #1
0
        public void UpdateLeaderboards()
        {
            long[]            times      = new long[this.racers.Count];
            List <RacePlayer> sortRacers = new List <RacePlayer>(this.racers);

            sortRacers.Sort((RacePlayer a, RacePlayer b) =>
            {
                return((int)(a.CheckpointScore - b.CheckpointScore));
            });

            RacePlayer[] players = sortRacers.ToArray();
            for (int i = 0; i < players.Length; i++)
            {
                RacePlayer player = players[i];

                times[i] = player.LastCheckpointHit == null ?
                           startTicks :
                           player.CheckpointTimes[player.LastCheckpointHit];
            }

            LeaderboardRPC rpc = new LeaderboardRPC(players, times);

            foreach (RacePlayer player in this.racers)
            {
                RpcManager.Instance.TriggerRPC(player, "SlipeRace.UpdateLeaderboard", rpc);
            }
        }
Beispiel #2
0
        public void LapCompleted_Default_IncrementsNumLapsByOne()
        {
            var racePlayer = new RacePlayer();
            racePlayer.LapCompleted();

            racePlayer.NumLapsCompleted.Should().Be(1);
        }
Beispiel #3
0
        public void FinishRace_Defualt_SetsPosition()
        {
            var racePlayer = new RacePlayer();
            racePlayer.FinishRace(new TimeSpan(), 1);

            racePlayer.Position.Should().Be(1);
        }
Beispiel #4
0
        public void Init(RacePlayer player)
        {
            Player = player;
            GetComponent <ToggleCanvasGroup>().Show();

            RaceFinishReport report = player.FinishReport;

            if (report != null)
            {
                if (report.Position != RaceFinishReport.DISQUALIFIED_POS)
                {
                    positionField.text = Utils.GetPosString(report.Position);
                }
                else
                {
                    positionField.color = Color.red;
                    positionField.text  = "DSQ";
                }

                timeField.text = Utils.GetTimeString(report.Time);
            }
            else
            {
                positionField.text = "???";

                timeField.text = "Still racing";
            }

            iconField.sprite = Data.ActiveData.Characters[player.Character].icon;
            nameField.text   = player.Name;
        }
Beispiel #5
0
        public void DisqualifyPlayer(RacePlayer player)
        {
            disqualifiedCount++;
            player.Vehicle.Destroy();
            player.HasFinished = true;

            CheckForFinish();
        }
Beispiel #6
0
        public void LapCompleted_Default_IncrementsNumLapsByOne()
        {
            var racePlayer = new RacePlayer();

            racePlayer.LapCompleted();

            racePlayer.NumLapsCompleted.Should().Be(1);
        }
Beispiel #7
0
        public void FinishRace_Defualt_SetsPosition()
        {
            var racePlayer = new RacePlayer();

            racePlayer.FinishRace(new TimeSpan(), 1);

            racePlayer.Position.Should().Be(1);
        }
Beispiel #8
0
        public void FinishRace_Defualt_SetsFinishTime()
        {
            var racePlayer = new RacePlayer();
            var finishTime = new TimeSpan(0, 2, 20);

            racePlayer.FinishRace(finishTime, 1);

            racePlayer.FinishTime.Should().Be(finishTime);
        }
Beispiel #9
0
        public void FinishRace_Defualt_SetsFinishTime()
        {
            var racePlayer = new RacePlayer();
            var finishTime = new TimeSpan(0, 2, 20);

            racePlayer.FinishRace(finishTime, 1);

            racePlayer.FinishTime.Should().Be(finishTime);
        }
Beispiel #10
0
 public void RemoveRacer(RacePlayer racer)
 {
     racers.Remove(racer);
     racer.CheckpointTimes.Clear();
     if (racer.Vehicle != null)
     {
         racer.Vehicle.Destroy();
     }
 }
Beispiel #11
0
 public void AddRacer(RacePlayer racer)
 {
     if (spawnpoints.Length <= racers.Count)
     {
         ChatBox.WriteLine(string.Format("There are only {0} positions available for this race!", this.spawnpoints.Length), racer, 0xff0000);
     }
     racers.Add(racer);
     racer.OnQuit += HandleQuit;
 }
Beispiel #12
0
 public CheckPoint GetNextCheckPoint(RacePlayer player)
 {
     CheckPoint[] list = CheckPoints;
     foreach (CheckPoint p in list)
     {
         if (p.CheckPointIndex == CheckPointIndex(player.Checks + 1))
         {
             return(p);
         }
     }
     return(null);
 }
Beispiel #13
0
        public void Reach(RacePlayer player, CheckPoint check)
        {
            if (check.CheckPointIndex == CheckPointIndex(player.Checks + 1))
            {
                //richtiger checkpoint, ganz klasse
                player.Checks++;
                Announce(player.Name + " reached " + player.Checks + ".");

                if (Lap(player.Checks) >= Laps && Laps > 0)
                {
                    Finish(player);
                }
            }
        }
Beispiel #14
0
        public void HandleCheckpointHit(Checkpoint checkpoint, RacePlayer player)
        {
            player.HitCheckpoint(checkpoint);
            UpdateLeaderboards();
            if (checkpoint.IsFinish)
            {
                this.finishedCount++;
                ChatBox.WriteLine(string.Format("{0} came in place {1}", player.Name, this.finishedCount), 0xffffff);

                player.Vehicle.Destroy();
                player.HasFinished = true;

                CheckForFinish();
            }
        }
Beispiel #15
0
        public void CheckForFinish()
        {
            if (!InProgress)
            {
                Cleanup();

                string message = string.Format("The race has ended, {0} players finished, {1} were disqualified!", this.finishedCount, this.disqualifiedCount);
                for (int i = racers.Count - 1; i >= 0; i--)
                {
                    RacePlayer racer = racers[i];
                    ChatBox.WriteLine(message, racer, 0xffffff);
                    racers.Remove(racer);
                }

                OnEnd?.Invoke();
            }
        }
Beispiel #16
0
        private void SpawnVehicles()
        {
            for (int i = 0; i < racers.Count; i++)
            {
                RacePlayer player     = racers[i];
                Spawnpoint spawnpoint = spawnpoints[i];

                Vehicle vehicle = new Vehicle(VehicleModel.FromId(spawnpoint.VehicleModel), spawnpoint.Position);
                player.Vehicle = vehicle;

                vehicle.FaceElement(checkpoints.FirstOrDefault());
                vehicle.OnExplode += (BaseVehicle source, OnExplodeEventArgs eventArgs) =>
                {
                    DisqualifyPlayer(player);
                };
                vehicle.OnStartExit += (BaseVehicle source, OnStartExitEventArgs eventArgs) =>
                {
                    Event.Cancel();
                };
            }
        }
Beispiel #17
0
        private void HandlePlayerJoin(RacePlayer player)
        {
            players.Add(player);

            player.OnQuit += HandlePlayerQuit;
        }
Beispiel #18
0
 private void AddPlayerToRace(RacePlayer player, Race race)
 {
     this.race.AddRacer(player);
     this.players.Remove(player);
 }
Beispiel #19
0
 protected void Finish(RacePlayer player)
 {
     Announce(player.Name + " finished.");
     EndGame();
 }