private void CacheFriendsForTeams()
        {
            this._friendsPerTeam.Clear();
            IEnumerable <PlayerId> friends = FriendListService.GetAllFriendsInAllPlatforms();

            if (friends == null)
            {
                return;
            }
            IEnumerable <MissionPeer> source = VirtualPlayer.Peers <MissionPeer>().Where <MissionPeer>((Func <MissionPeer, bool>)(x => friends.Contains <PlayerId>(x.Peer.Id)));

            foreach (Team team1 in (ReadOnlyCollection <Team>) this.Mission.Teams)
            {
                Team team = team1;
                if (team != null)
                {
                    this._friendsPerTeam.Add(team, source.Where <MissionPeer>((Func <MissionPeer, bool>)(x => x.Team == team)).Select <MissionPeer, VirtualPlayer>((Func <MissionPeer, VirtualPlayer>)(x => x.Peer)));
                }
            }
            if (this.OnUpdateFriendsPerTeam == null)
            {
                return;
            }
            this.OnUpdateFriendsPerTeam();
        }
 public Simulation_Window(string image, string DMode)
 {
     this.InitializeComponent();
     virtualPlayer = new VirtualPlayer(this.InkCanvas, this.path);
     virtualPlayer.startSimulation(image, DMode);
     Console.WriteLine(image);
 }
        /// <summary>
        ///     Handles spectating a user if applicable
        /// </summary>
        public void HandleSpectating()
        {
            if (Screen.SpectatorClient == null)
            {
                return;
            }

            if (CurrentFrame >= Replay.Frames.Count)
            {
                if (AudioEngine.Track.IsPlaying)
                {
                    AudioEngine.Track.Pause();
                }

                if (!Screen.IsPaused)
                {
                    Screen.IsPaused = true;
                }
                return;
            }

            VirtualPlayer.PlayAllFrames();

            if (Screen.IsPaused)
            {
                Screen.IsPaused = false;
            }

            if (AudioEngine.Track.IsPaused)
            {
                AudioEngine.Track.Play();
            }
        }
        public override void HandleNewClientAfterLoadingFinished(NetworkCommunicator networkPeer)
        {
            VirtualPlayer virtualPlayer1 = networkPeer.VirtualPlayer;

            GameNetwork.BeginBroadcastModuleEvent();
            GameNetwork.WriteMessage((GameNetworkMessage) new InitializeLobbyPeer(networkPeer, virtualPlayer1.Id, virtualPlayer1.BannerCode, virtualPlayer1.BodyProperties, virtualPlayer1.ChosenBadgeIndex, -1));
            GameNetwork.EndBroadcastModuleEvent(GameNetwork.EventBroadcastFlags.AddToMissionRecord | GameNetwork.EventBroadcastFlags.DontSendToPeers);
            foreach (NetworkCommunicator networkPeer1 in GameNetwork.NetworkPeers)
            {
                if (networkPeer1.IsSynchronized || networkPeer1 == networkPeer)
                {
                    if (networkPeer1 != networkPeer && networkPeer1 != GameNetwork.MyPeer)
                    {
                        GameNetwork.BeginModuleEventAsServer(networkPeer1);
                        GameNetwork.WriteMessage((GameNetworkMessage) new InitializeLobbyPeer(networkPeer, virtualPlayer1.Id, virtualPlayer1.BannerCode, virtualPlayer1.BodyProperties, virtualPlayer1.ChosenBadgeIndex, -1));
                        GameNetwork.EndModuleEventAsServer();
                    }
                    VirtualPlayer virtualPlayer2 = networkPeer1.VirtualPlayer;
                    if (!networkPeer.IsServerPeer)
                    {
                        GameNetwork.BeginModuleEventAsServer(networkPeer);
                        GameNetwork.WriteMessage((GameNetworkMessage) new InitializeLobbyPeer(networkPeer1, virtualPlayer2.Id, virtualPlayer2.BannerCode, virtualPlayer2.BodyProperties, virtualPlayer2.ChosenBadgeIndex, -1));
                        GameNetwork.EndModuleEventAsServer();
                    }
                }
            }
        }
Пример #5
0
 private void OnCollisionEnter(Collision collision)
 {
     if (collision.gameObject.tag == "Player" && !playerObj)
     {
         playerObj = collision.gameObject.GetComponent <VirtualPlayer>();
         animator.SetBool("isTalking", true);
         GameManager.Instance.shoppingWindow.SetActive(true);
     }
 }
Пример #6
0
 private void OnCollisionExit(Collision collision)
 {
     if (collision.gameObject.tag == "Player")
     {
         playerObj = null;
         animator.SetBool("isTalking", false);
         GameManager.Instance.shoppingWindow.SetActive(false);
     }
 }
Пример #7
0
 private void OnCollisionEnter(Collision collision)
 {
     if (collision.gameObject.tag == "Player" && !playerObj && GameManager.Instance.progress != StaticData.GAME_PROGRESS.FIGHTING)
     {
         playerObj = collision.gameObject.GetComponent <VirtualPlayer>();
         animator.SetBool("isReady", true);
         GameManager.Instance.ChangeProgress(StaticData.GAME_PROGRESS.FIGHTING);
         joystick.SetNoOfInstruction(this);
     }
 }
 public virtual void RequestStopSpawnSession()
 {
     this.IsSpawningEnabled       = false;
     this.SpawningDelayTimer      = 0.0f;
     this._hasCalledSpawningEnded = false;
     foreach (MissionPeer peer in VirtualPlayer.Peers <MissionPeer>())
     {
         this.AgentVisualSpawnComponent.RemoveAgentVisuals(peer, true);
     }
 }
Пример #9
0
        public UserControl_Passive(StateUpdate_Model stateUpdate, HomePage_ViewModel homePageViewModel)
        {
            this.activatetuto = false;


            this.BarInfoPassive = new UserControl_GameInfoBar(stateUpdate, homePageViewModel);
            InitializeComponent();
            this.virtualP = new VirtualPlayer(this.PassiveCanvas, this.PassiveCanvasPath);
            this.InfoBar.Children.Add(this.BarInfoPassive);
        }
Пример #10
0
            public MatrixFrame GetSpawnPointFrameForPlayer(
                VirtualPlayer player,
                BattleSideEnum side,
                int agentVisualIndex,
                int totalTroopCount,
                bool isMounted = false)
            {
                if (agentVisualIndex == 0)
                {
                    int num1 = -1;
                    int num2 = -1;
                    for (int index = 0; index < this._visualSpawnPointUsers.Length; ++index)
                    {
                        if (this._visualSpawnPointUsers[index] == player)
                        {
                            num1 = index;
                            break;
                        }
                        if (num2 < 0 && this._visualSpawnPointUsers[index] == null)
                        {
                            num2 = index;
                        }
                    }
                    int index1 = num1 >= 0 ? num1 : num2;
                    if (index1 < 0)
                    {
                        return(MatrixFrame.Identity);
                    }
                    this._visualSpawnPointUsers[index1] = player;
                    GameEntity gameEntity = (GameEntity)null;
                    switch (side)
                    {
                    case BattleSideEnum.Defender:
                        gameEntity = this._visualDefenderSpawnPoints[index1];
                        break;

                    case BattleSideEnum.Attacker:
                        gameEntity = this._visualAttackerSpawnPoints[index1];
                        break;
                    }
                    MatrixFrame matrixFrame = gameEntity != null?gameEntity.GetGlobalFrame() : this._visualSpawnPoints[index1].GetGlobalFrame();

                    matrixFrame.rotation.OrthonormalizeAccordingToForwardAndKeepUpAsZAxis();
                    return(matrixFrame);
                }
                Vec3 origin1  = this._visualSpawnPoints[3].GetGlobalFrame().origin;
                Vec3 origin2  = this._visualSpawnPoints[1].GetGlobalFrame().origin;
                Vec3 origin3  = this._visualSpawnPoints[5].GetGlobalFrame().origin;
                Mat3 rotation = this._visualSpawnPoints[0].GetGlobalFrame().rotation;

                rotation.MakeUnit();
                List <WorldFrame> formationCreation = Formation.GetFormationFramesForBeforeFormationCreation(origin2.Distance(origin3), totalTroopCount, isMounted, new WorldPosition(Mission.Current.Scene, origin1), rotation);

                return(formationCreation.Count < agentVisualIndex ? new MatrixFrame(rotation, origin1) : formationCreation[agentVisualIndex - 1].ToGroundMatrixFrame());
            }
Пример #11
0
 private void OnCollisionEnter(Collision collision)
 {
     if (collision.gameObject.tag == "Player" && !playerObj)
     {
         playerObj = collision.gameObject.GetComponent <VirtualPlayer>();
         animator.SetBool("isCrying", true);
         GameManager.Instance.ChangeProgress(StaticData.GAME_PROGRESS.WINNING);
         AudioManager.Instance.PlaySoundEffect(clip, true);
         Celebrate();
     }
 }
        private void HandleServerEventInitializeLobbyPeer(InitializeLobbyPeer message)
        {
            NetworkCommunicator peer          = message.Peer;
            VirtualPlayer       virtualPlayer = peer.VirtualPlayer;

            virtualPlayer.Id               = message.ProvidedId;
            virtualPlayer.BannerCode       = message.BannerCode;
            virtualPlayer.BodyProperties   = message.BodyProperties;
            virtualPlayer.ChosenBadgeIndex = message.ChosenBadgeIndex;
            peer.ForcedAvatarIndex         = message.ForcedAvatarIndex;
        }
Пример #13
0
 public void FreeSpawnPointFromPlayer(VirtualPlayer player)
 {
     for (int index = 0; index < this._visualSpawnPointUsers.Length; ++index)
     {
         if (this._visualSpawnPointUsers[index] == player)
         {
             this._visualSpawnPointUsers[index] = (VirtualPlayer)null;
             break;
         }
     }
 }
        public override void HandleEarlyNewClientAfterLoadingFinished(NetworkCommunicator networkPeer)
        {
            PlayerData    parameter     = networkPeer.PlayerConnectionInfo.GetParameter <PlayerData>("PlayerData");
            VirtualPlayer virtualPlayer = networkPeer.VirtualPlayer;

            virtualPlayer.Id               = parameter.PlayerId;
            virtualPlayer.BannerCode       = parameter.Bannercode;
            virtualPlayer.BodyProperties   = parameter.BodyProperties;
            virtualPlayer.IsFemale         = parameter.IsFemale;
            virtualPlayer.ChosenBadgeIndex = parameter.ShownBadgeIndex;
            networkPeer.IsMuted            = parameter.IsMuted;
        }
 public void ClearPeerCounts()
 {
     foreach (MissionPeer peer in VirtualPlayer.Peers <MissionPeer>())
     {
         peer.AssistCount = 0;
         peer.DeathCount  = 0;
         peer.KillCount   = 0;
         peer.Score       = 0;
         GameNetwork.BeginBroadcastModuleEvent();
         GameNetwork.WriteMessage((GameNetworkMessage) new KillDeathCountChange(peer.GetNetworkPeer(), (NetworkCommunicator)null, peer.KillCount, peer.AssistCount, peer.DeathCount, peer.Score));
         GameNetwork.EndBroadcastModuleEvent(GameNetwork.EventBroadcastFlags.None);
     }
 }
        /// <summary>
        ///     Determines which frame we are on in the replay and sets if it has unique key presses/releases.
        /// </summary>
        internal void HandleInput()
        {
            if (Screen.SpectatorClient != null)
            {
                VirtualPlayer.PlayAllFrames();
            }

            HandleScoring();

            if (CurrentFrame >= Replay.Frames.Count || !(Manager.CurrentAudioPosition >= Replay.Frames[CurrentFrame].Time) || !Screen.InReplayMode)
            {
                return;
            }

            var previousActive = Replay.KeyPressStateToLanes(Replay.Frames[CurrentFrame - 1].Keys);
            var currentActive  = Replay.KeyPressStateToLanes(Replay.Frames[CurrentFrame].Keys);

            foreach (var activeLane in currentActive)
            {
                try
                {
                    if (!previousActive.Contains(activeLane))
                    {
                        UniquePresses[activeLane] = true;
                    }
                }
                catch (Exception)
                {
                    // ignored
                }
            }

            foreach (var activeLane in previousActive)
            {
                try
                {
                    if (!currentActive.Contains(activeLane))
                    {
                        UniqueReleases[activeLane] = true;
                    }
                }
                catch (Exception)
                {
                    // ignored
                }
            }

            CurrentFrame++;
        }
Пример #17
0
        public void passiveStep1()
        {
            Tutorial_popupWindow a = new Tutorial_popupWindow("Bienvenu(e) dans la vue passive, vous allez avoir accès à cette vue quand c'est à l'équipe adverse de jouer.\n" +
                                                              "Vous pouvez voir que votre rôle est devenu passif et que la couleur des barres est verte.\n" +
                                                              "Dans cette vue, vous allez avoir accès à ce que le devineur de l'équipe adverse voit.", "Ok");

            a.ShowDialog();
            a = new Tutorial_popupWindow("Le rôle de passif consiste à regarder la partie qui se joue de l'équipe adverse.  Une fois le temps écouler, si l'équipe adverse ne devine pas le mot, vous aller avoir le droit à une riposte pour essayer de deviner le mot.", "Ok");
            a.ShowDialog();
            a = new Tutorial_popupWindow("Après avoir cliqué sur \"ok\", vous aller voir une simulation d'une partie qui durera 15 secondes, où l'autre équipe ne réussira pas à deviner le mot. Cliquer sur \"ok\" pour commencer.", "Ok");
            a.ShowDialog();
            virtualP = new VirtualPlayer(this.PassiveCanvas, this.PassiveCanvasPath);
            virtualP.startSimulation("svg_16udqo3c4k3c6ptda.svg", "PANORAMIC_U");
            this.wait();
        }
Пример #18
0
    //////////////////////////////////////////////////////////////////////////
    // RoundStartCO ( Coroutine )
    private IEnumerator     RoundStartCO()
    {
        UI.Instance.PrintStatus("");

        // Give two random cards to players
        for (int i = 0; i < MAX_PLAYERS; i++)
        {
            VirtualPlayer player = VirtualPlayer.Players[i];
            for (int j = 0; j < 2; j++)
            {
                Card randomCard = m_Deck[Random.Range(0, m_Deck.Count)].GetComponent <Card>();
                player.GetCard(randomCard);
            }
        }

        // Give two random cards to dealer, first is hidden
        Card randomCard1 = m_Deck[Random.Range(0, m_Deck.Count)].GetComponent <Card>();

        Dealer.Instance.GetCard(randomCard1);
        Card randomCard2 = m_Deck[Random.Range(0, m_Deck.Count)].GetComponent <Card>();

        Dealer.Instance.GetCard(randomCard2);

        // hide mouse
        Cursor.visible   = false;
        Cursor.lockState = CursorLockMode.Locked;

        m_RoundStartTime = m_HiddenCardShowTime;
        while (m_RoundStartTime > 0f)
        {
            m_RoundStartTime -= Time.deltaTime;
            yield return(null);
        }

        Cursor.visible   = true;
        Cursor.lockState = CursorLockMode.None;

        randomCard1.Shown = false;

        // Game setup is completed, players make their own decision
        VirtualPlayer.Players.ForEach(( VirtualPlayer p ) => p.MakeDecision());

        GameActive = true;

        UI.Instance.PrintStatus("Players Turn");

        this.ChechGameStatus();
    }
Пример #19
0
 protected override void OnEndMission()
 {
     base.OnEndMission();
     if (!GameNetwork.IsServer)
     {
         return;
     }
     foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers)
     {
         VirtualPlayer virtualPlayer = networkPeer.VirtualPlayer;
         TeamDeathmatchMissionRepresentative component = virtualPlayer.GetComponent <TeamDeathmatchMissionRepresentative>();
         if (component != null)
         {
             virtualPlayer.RemoveComponent((PeerComponent)component);
         }
     }
 }
Пример #20
0
        public NoobContinuousFire(BattleMain.Battle battle, VirtualPlayer virtualPlayer, int indexNum, float x) : base(battle, virtualPlayer, indexNum)
        {
            hp     = 65000;
            radius = 32f;

            position = new Vector2(x, BattleWindow.Up - 50f);
            speed    = 6f;

            headTime   = 600;
            middleTime = 5000;

            shootTime        = 1600;
            shootInterval    = 80;
            shootCount       = 0;
            enableShootCount = 10;

            isBulletToItem = false;
        }
Пример #21
0
    //////////////////////////////////////////////////////////////////////////
    // OnReet
    public void    NewRound()
    {
        m_WinnerPlayer       = null;
        m_HigherPlayerPoints = 0;
        GameActive           = false;

        // Reset cards
        Card.Cards.ForEach(( Card c ) => c.OnReset());

        // Reset players
        VirtualPlayer.Players.ForEach(( VirtualPlayer p ) => p.OnReset());

        Dealer.Instance.OnReset();

        m_CurrentPhase = GAMEPHASE.PLAYERS;

        StartCoroutine(RoundStartCO());
    }
 private void UpdateTextMessage(int playerId, string text)
 {
     //Unlike the others, we do display our own text messages, but it is handled differently
     if (playerId == _myPlayerId)
     {
         GameObject.FindGameObjectWithTag("Player").GetComponent <DialogController>().Speak(text, 5.0f);
         return;
     }
     //If this is an existing player, update their stats
     foreach (GameObject go in _players)
     {
         VirtualPlayer player = go.GetComponent <VirtualPlayer>();
         if (player.Id == playerId)
         {
             player.UpdateText(text);
             return;
         }
     }
 }
    internal override void Init()
    {
        Player1       = new Player(Players.player1, ElementTypes.cross);
        Player2       = new VirtualPlayer(Players.player2, ElementTypes.dot);
        _curentPlayer = Player1;
        _gameState    = GameState.started;

        BoardCellModels = new BoardCellModel[BoardManager.Instance.BoardWidth, BoardManager.Instance.BoardHeigh];
        for (int i = 0; i < BoardManager.Instance.BoardWidth; i++)
        {
            for (int j = 0; j < BoardManager.Instance.BoardHeigh; j++)
            {
                var cellModel = new BoardCellModel(ElementTypes.none);
                cellModel.ElementType = ElementTypes.none;
                BoardCellModels[i, j] = cellModel;
            }
        }
        NotifyTurn();
    }
Пример #24
0
    /// <summary>
    /// Add distant player to main GUI.
    /// </summary>
    /// <param name="player">The distant player to be added.</param>
    /// <returns>The particular distant player's GUI.</returns>
    public VirtualPlayer AddPlayer(Player player)
    {
        GameObject playerGUI      = Resources.Load("distant_player") as GameObject;
        GameObject playerOverview = Instantiate(playerGUI, this.transform.root);

        GameObject playerIcon  = Resources.Load("player") as GameObject;
        Text       playerLabel = playerIcon.GetComponentInChildren <Text>();

        playerLabel.text = player.Name;

        GameObject     distantPlayerIcon = Instantiate(playerIcon, this.transform);
        PlayerOverview po = distantPlayerIcon.GetComponent <PlayerOverview>();

        po.Overview = playerOverview;

        VirtualPlayer virtualPlayer = playerOverview.GetComponentInChildren <VirtualPlayer>();

        virtualPlayer.Initialize();
        return(virtualPlayer);
    }
Пример #25
0
        private void UpdateTeamPowerBasedOnGold(Team team)
        {
            int num1 = 0;
            int num2 = 0;

            foreach (MissionPeer peer in VirtualPlayer.Peers <MissionPeer>())
            {
                if (peer.Team != null && peer.Team.Side == team.Side)
                {
                    int gold = peer.GetComponent <FlagDominationMissionRepresentative>().Gold;
                    if (gold >= 100)
                    {
                        num2 += gold;
                    }
                    if (peer.ControlledAgent != null && peer.ControlledAgent.IsActive())
                    {
                        MultiplayerClassDivisions.MPHeroClass classForCharacter = MultiplayerClassDivisions.GetMPHeroClassForCharacter(peer.ControlledAgent.Character);
                        num2 += classForCharacter.TroopCost;
                    }
                    ++num1;
                }
            }
            int num3 = num1 + (team.Side == BattleSideEnum.Attacker ? MultiplayerOptions.OptionType.NumberOfBotsTeam1.GetIntValue() : MultiplayerOptions.OptionType.NumberOfBotsTeam2.GetIntValue());

            foreach (Agent activeAgent in team.ActiveAgents)
            {
                if (activeAgent.MissionPeer == null)
                {
                    num2 += 300;
                }
            }
            int   num4 = num3 * 300;
            float num5 = Math.Min(1f, num4 == 0 ? 0.0f : (float)num2 / (float)num4);
            Action <BattleSideEnum, float> powerChangedEvent = this.OnTeamPowerChangedEvent;

            if (powerChangedEvent == null)
            {
                return;
            }
            powerChangedEvent(team.Side, num5);
        }
Пример #26
0
    public void PlaceOnWorld(World pWorld, RaycastHit pHitSpot, VirtualPlayer p)
    {
        transform.localScale = Vector3.zero;

        transform.DOScale(new Vector3(pWorld.blockSize * _proportions.x, pWorld.blockSize * _proportions.y,
                                      pWorld.blockSize * _proportions.z), _scaleTime);

        Vector3 scaledNormal = Vector3.Scale(pHitSpot.normal, _proportions);

        transform.position = pHitSpot.transform.position + scaledNormal * pWorld.blockSize;

        Quaternion rot            = Quaternion.LookRotation(-p.transform.forward, pWorld.transform.up);
        Quaternion blockSpacesRot = pWorld.gridSpaces.transform.rotation;

        Vector3 eulerRot = rot.eulerAngles;

        eulerRot = new Vector3(GetAngle(eulerRot.x), GetAngle(eulerRot.y), GetAngle(eulerRot.z))
                   + new Vector3(0, blockSpacesRot.eulerAngles.y, blockSpacesRot.eulerAngles.z);
        rot.eulerAngles = eulerRot;

        transform.rotation = rot;
    }
        private void HandleScoring()
        {
            if (VirtualPlayer.CurrentFrame < VirtualPlayer.Replay.Frames.Count)
            {
                VirtualPlayer.PlayAllFrames();
            }

            for (var i = CurrentVirtualReplayStat + 1; i < VirtualPlayer.ScoreProcessor.Stats.Count; i++)
            {
                var hom = Screen.Ruleset.HitObjectManager as HitObjectManagerKeys;

                if (hom?.CurrentAudioPosition >= VirtualPlayer.ScoreProcessor.Stats[i].SongPosition)
                {
                    var judgement = VirtualPlayer.ScoreProcessor.Stats[i].Judgement;

                    ((ScoreProcessorKeys)Screen.Ruleset.ScoreProcessor).CalculateScore(judgement);

                    // Update Scoreboard
                    var view = (GameplayScreenView)Screen.View;
                    view.UpdateScoreAndAccuracyDisplays();

                    var playfield = (GameplayPlayfieldKeys)Screen.Ruleset.Playfield;
                    playfield.Stage.ComboDisplay.MakeVisible();

                    if (judgement != Judgement.Miss)
                    {
                        playfield.Stage.HitError.AddJudgement(judgement, VirtualPlayer.ScoreProcessor.Stats[i].HitDifference);
                    }

                    playfield.Stage.JudgementHitBurst.PerformJudgementAnimation(judgement);

                    CurrentVirtualReplayStat++;
                }
                else
                {
                    break;
                }
            }
        }
Пример #28
0
 private void CheckForPlayersSpawningAsBots()
 {
     foreach (MissionPeer peer in VirtualPlayer.Peers <MissionPeer>())
     {
         if (peer.GetNetworkPeer().IsSynchronized&& peer.ControlledAgent == null && (peer.Team != null && peer.ControlledFormation != null) && peer.SpawnCountThisRound > 0)
         {
             if (!peer.HasSpawnTimerExpired && peer.SpawnTimer.Check(MBCommon.GetTime(MBCommon.TimeType.Mission)))
             {
                 peer.HasSpawnTimerExpired = true;
             }
             if (peer.HasSpawnTimerExpired && peer.WantsToSpawnAsBot && peer.ControlledFormation.HasUnitsWithCondition((Func <Agent, bool>)(agent => agent.IsActive() && agent.IsAIControlled)))
             {
                 Agent newAgent       = (Agent)null;
                 Agent followingAgent = peer.FollowedAgent;
                 if (followingAgent != null && followingAgent.IsActive() && (followingAgent.IsAIControlled && peer.ControlledFormation.HasUnitsWithCondition((Func <Agent, bool>)(agent => agent == followingAgent))))
                 {
                     newAgent = followingAgent;
                 }
                 else
                 {
                     float maxHealth = 0.0f;
                     peer.ControlledFormation.ApplyActionOnEachUnit((Action <Agent>)(agent =>
                     {
                         if ((double)agent.Health <= (double)maxHealth)
                         {
                             return;
                         }
                         maxHealth = agent.Health;
                         newAgent  = agent;
                     }));
                 }
                 Mission.Current.ReplaceBotWithPlayer(newAgent, peer);
                 peer.WantsToSpawnAsBot    = false;
                 peer.HasSpawnTimerExpired = false;
             }
         }
     }
 }
        private void SendNotificationToTeam(
            Team team,
            MultiplayerGameNotificationsComponent.MultiplayerNotificationEnum message,
            int param1 = -1,
            int param2 = -1)
        {
            NetworkCommunicator myPeer      = GameNetwork.MyPeer;
            MissionPeer         missionPeer = myPeer != null?myPeer.GetComponent <MissionPeer>() : (MissionPeer)null;

            if (!GameNetwork.IsDedicatedServer && (missionPeer?.Team != null && missionPeer.Team.IsEnemyOf(team)))
            {
                this.ShowNotification(message, param1, param2);
            }
            foreach (MissionPeer peer in VirtualPlayer.Peers <MissionPeer>())
            {
                if (peer.Team != null && !peer.IsMine && !peer.Team.IsEnemyOf(team))
                {
                    GameNetwork.BeginModuleEventAsServer(peer.Peer);
                    GameNetwork.WriteMessage((GameNetworkMessage) new NotificationMessage((int)message, param1, param2));
                    GameNetwork.EndModuleEventAsServer();
                }
            }
        }
    private void UpdateRoster(int playerId, int level, int spriteId, string name)
    {
        //Skip if this is "us"
        //Debug.Log("Roster update for player ID " + playerId + ", name " + name);
        if (playerId == _myPlayerId)
        {
            //Debug.Log("Received roster update for yourself!");
            return;
        }
        ;
        //If this is an existing player, update their stats
        foreach (GameObject go in _players)
        {
            VirtualPlayer player = go.GetComponent <VirtualPlayer>();
            if (player.Id == playerId)
            {
                //If the level == -1, this player is disconnecting
                if (level == -1)
                {
                    _players.Remove(go);
                    //Debug.Log("Removing player " + player.Name + " from roster");
                    Destroy(go);
                    return;
                }
                //Debug.Log("Updating player " + player.Name);
                player.UpdateStats(level, spriteId, name);
                return;
            }
        }
        //Else create a new player
        Debug.Log("Creating new player " + playerId + ": " + name);
        var newPlayer = Instantiate(VirtualPlayerPrefab);

        newPlayer.GetComponent <VirtualPlayer>().InitializeStats(playerId, level, spriteId, name);
        GameObject.DontDestroyOnLoad(newPlayer);
        _players.Add(newPlayer);
    }