public override bool CheckPlayerTankSelectionValid(Engine.GamePlayer player, string tankType)
 {
     if (Engine.Tanks.Tank.GetAllTankTypes().Contains(tankType))
     {
         player.SelectedTankReflectionName = tankType;
         return(true);
     }
     return(false);
 }
Exemple #2
0
        public GamePlayer AddPlayer <GamePlayer>(GamePlayer player) where GamePlayer : Engine.GamePlayer
        {
            if (!_playerIds.Contains(player.Id))
            {
                _playerIds.Add(player.Id);
                player.IsSpectator      = false; //Default them to being in game except in exigent circumstances (e.g. they chose to spectate)
                player.Game             = this;
                player.AllowedTankTypes = Gamemode.GetPlayerAllowedTankTypes(player);
                _playersById.Add(player.Id, player);
            }

            if (Authoritative)
            {
                if (Running && !Gamemode.HotJoinEnabled)
                {
                    player.IsSpectator = true; //Force spectator
                }
                else if (Running && Gamemode.HotJoinCanPlayerJoin(player))
                {
                    player.IsSpectator = false;
                    //Let them join - first find the team and size the player list correctly
                    player.Team = Gamemode.HotJoinGetPlayerTeam(player);
                    var newPlayerArray = new Engine.GamePlayer[player.Team.Players.Length + 1];
                    Array.Copy(player.Team.Players, newPlayerArray, player.Team.Players.Length);
                    newPlayerArray[newPlayerArray.Length - 1] = player;
                    player.Team.Players = newPlayerArray;

                    //Then tanks
                    player.AllowedTankTypes = Gamemode.HotJoinGetAllowedTankTypes(player);

                    //And add a timeout for them
                    TimerFactory.CreateTimer(a =>
                    {
                        if (player.HasTank || player.HasSelectedTankYet)
                        {
                            return;
                        }
                        _hotJoinPlayersWaitingForTankSelection.Remove(player);
                        SetupPlayer(player);
                    }, Settings.HotJoinTankSelectionTime);

                    _hotJoinPlayersWaitingForTankSelection.Add(player);
                }
            }
            return(player);
        }
Exemple #3
0
        private Engine.GamePlayer[] ShufflePlayers(Engine.GamePlayer[] players)
        {
            var arrNew = new Engine.GamePlayer[players.Length];

            Random rnd = new Random();

            foreach (var p in players)
            {
                var saved = false;

                while (!saved)
                {
                    var index = rnd.Next(0, players.Length);
                    if (arrNew[index] == null)
                    {
                        arrNew[index] = p;
                        saved         = true;
                    }
                }
            }

            return(arrNew);
        }
 public override string[] GetPlayerAllowedTankTypes(Engine.GamePlayer player)
 {
     return(Engine.Tanks.Tank.GetAllTankTypes().ToArray());
 }