예제 #1
0
        public void TriggerPlayerQuitEvent()
        {
            PlayerQuit playerQuitEvent = PlayerQuit.Create();

            playerQuitEvent.PlayerID = SWMatchmaking.GetMyBoltId();
            playerQuitEvent.Send();
        }
예제 #2
0
        public void FindGame()
        {
            var lobbyList = BoltNetwork.SessionList;

            foreach (var lobby in lobbyList)
            {
                var lobbyToken = SWMatchmaking.GetLobbyToken(lobby.Key);
                Debug.Log("[LOBBY] Name : " + lobbyToken.ServerName);
                var lobbyMatchesSelectedServerName = _matchmakingSettings.LookForPrivateGames && lobbyToken.ServerName == _matchmakingSettings.PrivateGameName;
                Debug.Log("[LOBBY] Matched : " + lobbyMatchesSelectedServerName);
                var lobbyMatchesSelectedGamemodes   = !_matchmakingSettings.LookForPrivateGames && _lobbyData.GamemodePool.Contains(lobbyToken.GameMode);
                var lobbyMatchesMatchmakingSettings = (!lobbyToken.GameStarted || lobbyToken.GameStarted == _matchmakingSettings.LookForStartedGames);

                if ((lobbyMatchesSelectedServerName || lobbyMatchesSelectedGamemodes) &&
                    lobbyMatchesMatchmakingSettings &&
                    lobbyToken.CanBeJoined &&
                    lobbyToken.Version.Equals(_lobbyData.Version))
                {
                    _lobbyData.SetGamemode(lobbyToken.GameMode);
                    _lobbyData.SetMap(lobbyToken.MapName);
                    SWMatchmaking.JoinLobby
                    (
                        lobby.Key,
                        new JoinToken()
                    {
                        Nickname = _playerSettings.Nickname
                    }
                    );
                }
            }
        }
예제 #3
0
        public void TriggerPlayerHitEvent()
        {
            PlayerHit playerHitEvent = PlayerHit.Create();

            playerHitEvent.VictimEntity = SWExtensions.KartExtensions.GetKartWithID(SWMatchmaking.GetMyBoltId()).GetComponent <BoltEntity>();
            playerHitEvent.Send();
        }
예제 #4
0
        // PRIVATE

        private IEnumerator SetLobbyPrivateAfterXSeconds(float x)
        {
            yield return(new WaitForSeconds(x));

            _lobbyData.CanBeJoined = false;
            SWMatchmaking.SetLobbyData(_lobbyData);
        }
예제 #5
0
 public override void Connected(BoltConnection connection)
 {
     if (connection.ConnectionId == SWMatchmaking.GetMyBoltId())
     {
         SetLookingForPlayers();
         ResetTimer();
     }
 }
예제 #6
0
        private void SendRespawnRequestEvent(PlayerSettings player)
        {
            RespawnRequest respawnRequestEvent = RespawnRequest.Create();

            respawnRequestEvent.ConnectionID = SWMatchmaking.GetMyBoltId();
            respawnRequestEvent.Team         = (int)player.ColorSettings.TeamEnum;
            respawnRequestEvent.Send();
        }
예제 #7
0
 public override void OnEvent(PlayerInfoEvent evnt)
 {
     if (evnt.TargetPlayerID == SWMatchmaking.GetMyBoltId() && // This event is for me
         evnt.KartEntity == _entity &&                         // This is the targetted kart
         !evnt.KartEntity.IsOwner)                             // I don't own this kart
     {
         SetVoicelines(evnt.CharacterIndex);
     }
 }
예제 #8
0
        // PRIVATE

        private void UpdateCurrentPlayerCount(int playerCount)
        {
            _currentPlayerCountText.text = playerCount + " players";

            if (BoltNetwork.IsServer)
            {
                _lobbyData.CurrentPlayers = playerCount;
                SWMatchmaking.UpdateLobbyData(_lobbyData);
            }
        }
예제 #9
0
        private IEnumerator ServerConnectionCheckRoutine()
        {
            var connectedToHost = true;

            while (connectedToHost)
            {
                connectedToHost = SWMatchmaking.ConnectedToHost();
                yield return(new WaitForSeconds(1f));
            }
            SceneManager.LoadScene("Menu");
        }
예제 #10
0
 public override void OnEvent(PlayerInfoEvent evnt)
 {
     if (evnt.TargetPlayerID == SWMatchmaking.GetMyBoltId() && // This event is for me
         evnt.KartEntity == _kartEntity &&                     // This is the targetted kart
         !evnt.KartEntity.IsOwner)                             // I don't own this kart
     {
         Nickname = evnt.Nickname;
         Team     = evnt.Team.ToTeam();
         OwnerID  = evnt.PlayerID;
     }
 }
예제 #11
0
 public override void OnEvent(PlayerSpawn evnt)
 {
     if (evnt.ConnectionID == SWMatchmaking.GetMyBoltId())
     {
         if (_gameStarted.Value == false && evnt.GameStarted == true)
         {
             _gameStarted.Value = true;
         }
         InstantiateKart(evnt.SpawnPosition, evnt.SpawnRotation, evnt.TeamEnum.ToTeam(), (RoomProtocolToken)evnt.RoomToken);
     }
 }
예제 #12
0
        // CORE

        private void Start()
        {
            if (BoltNetwork.IsServer)
            {
                _lobbyData.CanBeJoined = true;
                _lobbyData.GameStarted = true;
                SWMatchmaking.SetLobbyData(_lobbyData);

                StartCoroutine(SetLobbyPrivateAfterXSeconds(_secondsBeforeLobbyGoesPrivate));
            }
        }
 public override void OnEvent(PlayerAllStats evnt)
 {
     if (evnt.TargetPlayerID == SWMatchmaking.GetMyBoltId())
     {
         var entry = CreateEntryForPlayer(evnt.PlayerID, evnt.Name, evnt.Team.ToTeam());
         if (entry)
         {
             entry.UpdateKillCount(evnt.KillCount);
             entry.UpdateDeathCount(evnt.DeathCount);
         }
     }
 }
예제 #14
0
 public static void JoinLobby(string serverName, IProtocolToken connectToken = null)
 {
     foreach (var session in BoltNetwork.SessionList)
     {
         var lobbyToken = SWMatchmaking.GetLobbyToken(session.Key);
         Debug.Log("Server name : " + lobbyToken.ServerName);
         if (lobbyToken.ServerName.Equals(serverName))
         {
             BoltNetwork.Connect(BoltNetwork.SessionList[session.Key], connectToken);
         }
     }
 }
예제 #15
0
        public void CreateRandomGame()
        {
            _lobbyData.SetRandomGamemode();
            PopulateMapList();
            _lobbyData.SetRandomMap();
            SWMatchmaking.SetLobbyData(_lobbyData);
            Debug.Log("Creating random game for " + _lobbyData.ChosenGamemode);
            SWMatchmaking.CreateLobby();

            if (OnGameCreated != null)
            {
                OnGameCreated.Invoke();
            }
        }
예제 #16
0
        public override void Disconnected(BoltConnection connection)
        {
            var joinToken = (JoinToken)connection.ConnectToken;

            if (BoltNetwork.IsServer)
            {
                var             playerCount          = SWMatchmaking.GetCurrentLobbyPlayerCount();
                LobbyPlayerLeft lobbyPlayerLeftEvent = LobbyPlayerLeft.Create();
                lobbyPlayerLeftEvent.LobbyPlayerCount = playerCount;
                lobbyPlayerLeftEvent.PlayerID         = (int)connection.ConnectionId;
                lobbyPlayerLeftEvent.PlayerNickname   = joinToken.Nickname;
                lobbyPlayerLeftEvent.Send();
            }
        }
예제 #17
0
        // PUBLIC

        public void StartNextGame()
        {
            if (BoltNetwork.IsServer)
            {
                SWMatchmaking.SetLobbyData(_lobbyData);

                var token = new Multiplayer.RoomProtocolToken()
                {
                    Gamemode     = _lobbyData.ChosenGamemode,
                    PlayersCount = SWMatchmaking.GetCurrentLobbyPlayerCount()
                };
                BoltNetwork.LoadScene(_lobbyData.ChosenMapName, token);
            }
        }
예제 #18
0
        private IEnumerator JoinBoltLobby(string serverName)
        {
            while (!(BoltNetwork.IsClient && BoltNetwork.SessionList.Count > 0))
            {
                yield return(new WaitForEndOfFrame());
            }
            Debug.Log("[BOLT] Joining lobby ...");
            SWMatchmaking.JoinLobby(serverName, new JoinToken()
            {
                Nickname = _playerSettings.Nickname
            });

            _tinyLobbyPanel.SetActive(true);
        }
예제 #19
0
        // PRIVATE

        private void SetLobbyData()
        {
            if (_lobbyData.Public)
            {
                _lobbyData.SetRandomName();
            }
            _lobbyData.GameStarted = false;
            _lobbyData.CanBeJoined = true;
            _lobbyData.SetRandomGamemode();
            _lobbyData.SetRandomMap();

            VerifyLobbyDataSanity();
            SWMatchmaking.SetLobbyData(_lobbyData);
        }
예제 #20
0
        public override void SceneLoadLocalDone(string map, IProtocolToken token)
        {
            if (BoltNetwork.IsServer)
            {
                InitializeSpawns();

                RoomInfoToken = (RoomProtocolToken)token;
                _playersCount = RoomInfoToken.PlayersCount;

                // Instantiate server kart
                var serverTeam = _teamAssigner.PickAvailableTeam();
                AssignSpawn(SWMatchmaking.GetMyBoltId(), serverTeam);
                _teamAssigner.AddPlayer(serverTeam, SWMatchmaking.GetMyBoltId());
            }
        }
예제 #21
0
        public override void SessionListUpdated(Map <Guid, UdpSession> sessionList)
        {
            LobbyToken lobbyToken;
            int        matchedLobbyCount = 0;

            foreach (var lobby in sessionList)
            {
                lobbyToken = SWMatchmaking.GetLobbyToken(lobby.Key);

                if (_lobbyData.GamemodePool.Contains(lobbyToken.GameMode))
                {
                    matchedLobbyCount++;
                }
            }
            UpdateCurrentMatchedLobbies(matchedLobbyCount);
        }
예제 #22
0
        private void CheckTimer()
        {
            if (BoltNetwork.IsServer && _timer > _secondsBeforeLaunchingGame && (1 + SWMatchmaking.GetCurrentLobbyPlayerCount()) >= _minimumPlayersToAutomaticLaunch)
            {
                ResetTimer();
                if (OnAutomaticLaunch != null)
                {
                    OnAutomaticLaunch.Invoke();
                }
            }
            else if (BoltNetwork.IsClient && _timer > _secondsBeforeCreatingGame && !_createGamePanelOpen)
            {
                _createGamePanelOpen = true;

                if (OnNoLobbyFound != null)
                {
                    OnNoLobbyFound.Invoke();
                }
            }
        }
예제 #23
0
        // PRIVATE

        private void InstantiateKart(Vector3 spawnPosition, Quaternion spawnRotation, Team team, RoomProtocolToken roomProtocolToken)
        {
            GameObject myKart;

            if (roomProtocolToken != null)
            {
                myKart = BoltNetwork.Instantiate(BoltPrefabs.Kart, roomProtocolToken);
            }
            else
            {
                Debug.LogError("RoomToken not set.");
                myKart = BoltNetwork.Instantiate(BoltPrefabs.Kart);
            }

            _playerSettings.ColorSettings = _gameSettings.TeamsListSettings.GetSettings(team);

            myKart.GetComponentInChildren <Health.Health>().SetInvincibilityForXSeconds(_playerSettings.InvicibilityOnSpawnDuration);
            myKart.transform.position = spawnPosition;
            myKart.transform.rotation = spawnRotation;
            PlayerInfo.Me             = myKart.GetComponent <PlayerInfo>();
            myKart.GetComponent <PlayerInfo>().Nickname = _playerSettings.Nickname;
            myKart.GetComponent <PlayerInfo>().OwnerID  = SWMatchmaking.GetMyBoltId();
            myKart.GetComponent <PlayerInfo>().Team     = team;
            myKart.GetComponent <BoltEntity>().GetState <IKartState>().Team    = (int)team;
            myKart.GetComponent <BoltEntity>().GetState <IKartState>().OwnerID = SWMatchmaking.GetMyBoltId();

            PlayerReady playerReadyEvent = PlayerReady.Create();

            playerReadyEvent.Nickname       = _playerSettings.Nickname;
            playerReadyEvent.PlayerID       = SWMatchmaking.GetMyBoltId();
            playerReadyEvent.Team           = (int)team;
            playerReadyEvent.KartIndex      = _playerSettings.KartIndex;
            playerReadyEvent.CharacterIndex = _playerSettings.CharacterIndex;
            playerReadyEvent.Entity         = myKart.GetComponent <BoltEntity>();
            playerReadyEvent.Send();
        }
예제 #24
0
        // PUBLIC

        public void CreateLobby()
        {
            SWMatchmaking.SetRegion((int)udpkit.platform.photon.PhotonRegion.Regions.BEST_REGION);
            SWMatchmaking.CreateLobby();
            StartCoroutine(WaitForLobbyCreated());
        }
예제 #25
0
        // PUBLIC

        public void SetRegion(int regionID)
        {
            SWMatchmaking.SetRegion(regionID);
        }