private void SendPhysicsEndGrab(NetworkEntityIdentificationComponentData netIDComp)
        {
            //if droping a physics object update it for all.
            if (!currentGrabbedObjectRigidBody)
            {
                return;
            }

            if (!NetworkedPhysicsManager.Instance.physics_networkedEntities.Contains(currentGrabbedNetObject))
            {
                NetworkedPhysicsManager.Instance.physics_networkedEntities.Add(currentGrabbedNetObject);
            }

            if (Entity_Type.physicsObject != netIDComp.current_Entity_Type)
            {
                return;
            }

            if (entityManager.HasComponent <SendNetworkUpdateTag>(currentGrabbedNetObject.Entity))
            {
                return;
            }

            entityManager.AddComponent <SendNetworkUpdateTag>(currentGrabbedNetObject.Entity);
        }
Beispiel #2
0
        /// <summary>
        /// A call to remove Physics funcionality from specified netObject
        /// </summary>
        /// <param name="eContainer"></param>
        public void StopPhysicsUpdates(NetworkedGameObject eContainer)
        {
            Position coords = default;

            NetworkEntityIdentificationComponentData entityIDContainer = entityManager.GetComponentData <NetworkEntityIdentificationComponentData>(eContainer.Entity);

            coords = new Position
            {
                clientId   = entityIDContainer.clientID,
                entityId   = entityIDContainer.entityID,
                entityType = (int)Entity_Type.physicsEnd,
            };

            coordExport.Invoke(coords);
        }
Beispiel #3
0
        /// <summary>
        /// Meant to convert our Physics GameObject data send  data to follow our POSITION struct to be sent each update
        /// </summary>
        /// <param name="Net_Register_GameObject container of data"></param>
        public void SendPhysicsGameObjectUpdatesToNetwork(NetworkedGameObject eContainer)
        {
            int entityID = default;
            NetworkEntityIdentificationComponentData entityIDContainer = default;

            entityIDContainer = entityManager.GetComponentData <NetworkEntityIdentificationComponentData>(eContainer.Entity);
            entityID          = entityIDContainer.entityID;

            //make sure that we setup the reference to our rigidBody of our physics object that we are using to send data from
            if (!ClientSpawnManager.Instance.rigidbodyFromEntityId.ContainsKey(entityID))
            {
                ClientSpawnManager.Instance.rigidbodyFromEntityId.Add(entityID, eContainer.GetComponent <Rigidbody>());
            }
            var rb = ClientSpawnManager.Instance.rigidbodyFromEntityId[entityID];

            if (!rb)
            {
                Debug.LogError("There is no rigidbody in netobject entity id DICTIONARY: " + entityID);
                return;
            }

            Position coords = default;

            if (!rb.isKinematic && rb.IsSleeping() || entityManager.HasComponent <TransformLockTag>(eContainer.Entity))
            {
                physicsnRGOToRemove.Add(eContainer);

                //Send a last update for our network objects to be remove their physics funcionality to sync with others.
                StopPhysicsUpdates(eContainer);
            }

            coords = new Position
            {
                clientId    = entityIDContainer.clientID,
                entityId    = entityIDContainer.entityID,
                entityType  = (int)entityIDContainer.current_Entity_Type,
                rot         = eContainer.transform.rotation,
                pos         = eContainer.transform.position,
                scaleFactor = eContainer.transform.lossyScale.x,
            };

            coordExport.Invoke(coords);
        }
        private void SendInteractionEndGrab(NetworkEntityIdentificationComponentData netIDComp)
        {
            var entityID = netIDComp.entityID;

            NetworkUpdateHandler.Instance.SendSyncInteractionMessage(new Interaction
            {
                sourceEntity_id = int.Parse(NetworkUpdateHandler.Instance.client_id.ToString() + handEntityType.ToString()),

                targetEntity_id = entityID,

                interactionType = (int)INTERACTIONS.DROP,
            });

            MainClientUpdater.Instance.RemoveUpdatable(currentGrabbedNetObject);

            if (!entityManager.HasComponent <SendNetworkUpdateTag>(currentGrabbedNetObject.Entity))
            {
                Debug.LogWarning("Tried to remove SendNetworkUpdateTag from netObject, but the tag was not found.");

                return;
            }

            entityManager.RemoveComponent <SendNetworkUpdateTag>(currentGrabbedNetObject.Entity);
        }