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);
                }
            }
        }
Ejemplo n.º 3
0
 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;
            }
        }