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); }
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); }