private bool createRemotePlayer(DataEntityHandle remotePlayerHandle, bool attemptSpawn = true)
        {
            if (!dataEntityCollection.HasComponent <GameObjectReferenceData>(remotePlayerHandle))
            {
                dataEntityCollection.AddComponent <GameObjectReferenceData>(remotePlayerHandle);
            }
            if (!dataEntityCollection.HasComponent <AirBubbleData>(remotePlayerHandle))
            {
                dataEntityCollection.AddComponent <AirBubbleData>(remotePlayerHandle);
            }
            PositionData     component  = dataEntityCollection.GetComponent <PositionData>(remotePlayerHandle);
            RemotePlayerData component2 = dataEntityCollection.GetComponent <RemotePlayerData>(remotePlayerHandle);

            component2.PlayerRemoved += onPlayerRemoved;
            playerRemovedListeners.Add(component2);
            PresenceData component3 = dataEntityCollection.GetComponent <PresenceData>(remotePlayerHandle);

            if (component3 != null)
            {
                component3.PresenceDataUpdated += onPresenceDataUpdated;
            }
            if (!dataEntityCollection.HasComponent <LODRequestReference>(remotePlayerHandle))
            {
                LODRequestData requestData = new LODRequestData(LODSystem.REMOTE_PLAYER, remotePlayerHandle, component);
                requestData.OnGameObjectGeneratedEvent += onLODGameObjectGenerated;
                requestData.OnGameObjectRevokedEvent   += onLODGameObjectRevoked;
                LODRequest request = Service.Get <LODService>().Request(requestData, attemptSpawn);
                dataEntityCollection.AddComponent <LODRequestReference>(remotePlayerHandle).Request = request;
            }
            return(false);
        }
Exemple #2
0
        private void onPlayerRemoved(RemotePlayerData remotePlayerData)
        {
            remotePlayerData.PlayerRemoved -= onPlayerRemoved;
            DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(remotePlayerData);
            long             sessionId         = dataEntityCollection.GetComponent <SessionIdData>(entityByComponent).SessionId;

            if (activePlayerNameTags.ContainsKey(sessionId))
            {
                PlayerNameTag playerNameTag = activePlayerNameTags[sessionId].PlayerNameTag;
                if (playerNameTag != null)
                {
                    playerNameTag.SetActive(isActive: false);
                    playerNameTagPool.Unspawn(playerNameTag.gameObject);
                }
                activePlayerNameTags.Remove(sessionId);
            }
        }
        private void onPlayerRemoved(RemotePlayerData component)
        {
            component.PlayerRemoved -= onPlayerRemoved;
            playerRemovedListeners.Remove(component);
            DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(component);

            if (entityByComponent.IsNull)
            {
                Log.LogError(this, "RemotePlayerData removed, but the handle could not be found for the component");
            }
            if (dataEntityCollection.TryGetComponent <LODRequestReference>(entityByComponent, out var component2))
            {
                Service.Get <LODService>().RemoveRequest(component2.Request);
            }
            avatarViewReady.Remove(entityByComponent);
            hasBeenPlaced.Remove(entityByComponent);
            dataEntityCollection.RemoveComponent <GameObjectReferenceData>(entityByComponent);
        }