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 onPlayerMoved(PositionData positionData, Vector3 newPosition) { if (positionData == null) { return; } positionData.PlayerMoved -= onPlayerMoved; if (base.gameObject.IsDestroyed()) { return; } DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(positionData); if (DataEntityHandle.IsNullValue(entityByComponent)) { return; } GameObjectReferenceData component = dataEntityCollection.GetComponent <GameObjectReferenceData>(entityByComponent); if (component != null) { GameObject remotePlayer = component.GameObject; if (!remotePlayer.IsDestroyed()) { placeRemotePlayer(remotePlayer, entityByComponent, newPosition); } } }
private void setInitialPosition(GameObject playerGameObject, DataEntityHandle playerdataHandle) { if (!playerdataHandle.IsNull) { PositionData component = dataEntityCollection.GetComponent <PositionData>(playerdataHandle); if (component != null && component.Position != Vector3.zero) { playerGameObject.transform.position = dataEntityCollection.GetComponent <PositionData>(playerdataHandle).Position; } } }
private void onAvatarIsReady(AvatarBaseAsync avatarView) { avatarView.OnReady -= onAvatarIsReady; GameObject gameObject = avatarView.gameObject; AvatarDataHandle component = gameObject.GetComponent <AvatarDataHandle>(); if (!(component != null) || component.Handle.IsNull || !dataEntityCollection.TryGetComponent <RemotePlayerData>(component.Handle, out var _)) { return; } DataEntityHandle handle = null; if (AvatarDataHandle.TryGetPlayerHandle(gameObject, out handle)) { avatarViewReady.Add(handle); PositionData component3 = dataEntityCollection.GetComponent <PositionData>(handle); if (component3.Position != Vector3.zero) { placeRemotePlayer(gameObject, handle, component3.Position); } } Service.Get <EventDispatcher>().DispatchEvent(new PlayerSpawnedEvents.RemotePlayerSpawned(gameObject, component.Handle)); }
public void AssignAvatarView(AvatarView avatarView, DataEntityHandle remotePlayerHandle, GameObject remotePlayerGO) { GameObjectReferenceData component = dataEntityCollection.GetComponent <GameObjectReferenceData>(remotePlayerHandle); component.GameObject = remotePlayerGO; if (avatarView.IsReady) { onAvatarIsReady(avatarView); } else { avatarView.OnReady += onAvatarIsReady; } PositionData component2 = dataEntityCollection.GetComponent <PositionData>(remotePlayerHandle); if (component2.Position != Vector3.zero) { placeRemotePlayer(remotePlayerGO, remotePlayerHandle, component2.Position); } else { component2.PlayerMoved += onPlayerMoved; } }