public void SyncTransform(World world, Entity entity, SyncTransformMessage msg)
        {
            EntityManager     manager     = world.EntityManager;
            TransformSyncData transform   = manager.GetComponentData <TransformSyncData> (entity);
            Translation       translation = manager.GetComponentData <Translation> (entity);
            RotationEulerXYZ  rot         = manager.GetComponentData <RotationEulerXYZ> (entity);

            transform.timeTillLastSync = 0f;
            transform.oposX            = translation.Value.x;
            transform.oposY            = translation.Value.y;
            transform.oposZ            = translation.Value.z;
            transform.orotX            = rot.Value.x;
            transform.orotY            = rot.Value.y;
            transform.orotZ            = rot.Value.z;
            if (msg.isPos)
            {
                transform.posX = msg.pos.x;
                transform.posY = msg.pos.y;
                transform.posZ = msg.pos.z;
            }

            if (msg.isRot)
            {
                transform.rotX = msg.rot.x;
                transform.rotY = msg.rot.y;
                transform.rotZ = msg.rot.z;
                transform.rotW = msg.rot.w;
            }

            manager.SetComponentData(entity, transform);
        }
Exemple #2
0
    private void OnReceiveMovementMessage(NetworkMessage _message)
    {
        SyncTransformMessage _msg = _message.ReadMessage <SyncTransformMessage>();

        if (_msg.forObjectID != netId)
        {
            Manager.Instance.ConnectedObjects[_msg.forObjectID].GetComponent <NetworkSyncMessenger>().ReceiveMovementMessage(_msg.positionX, _msg.positionY, _msg.positionZ, _msg.eulerY, _msg.time);
        }
    }
Exemple #3
0
    public void SendMovementMessage(NetworkInstanceId _playerID, Vector3 _position, Quaternion _rotation, float _timeTolerp)
    {
        SyncTransformMessage _msg = new SyncTransformMessage()
        {
            positionX   = FloatToInt(_position.x),
            positionY   = FloatToInt(_position.y),
            positionZ   = FloatToHalf(_position.z),
            eulerY      = FloatToHalf(_rotation.eulerAngles.y),
            forObjectID = _playerID,
            time        = FloatToHalf(_timeTolerp)
        };

        NetworkManager.singleton.client.Send(movement_msg, _msg);
    }
        public virtual void OnNewMessage(GlobalGameData msg, Player player)
        {
            switch (msg.type)
            {
            case "synctransform":
            {
                SyncTransformMessage syncTransformMessage = JsonUtility.FromJson <SyncTransformMessage> (msg.data);
                var objExist = match.spawnedObjects.ContainsKey(msg.objectId);
                if (objExist)
                {
                    if (!match.spawnedObjects[msg.objectId].ready)
                    {
                        return;
                    }
                    Entity e = match.spawnedObjects[msg.objectId].entity;
                    managerComponent.SyncTransform(match.world, e, syncTransformMessage);
                    match.BroadcastExceptPlayer("gamedata", msg, player);
                }

                break;
            }
            }
        }
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            float deltaTime     = Time.DeltaTime;
            var   isServer      = _isServer;
            var   clientHandler = _clientHandler;
            var   serverHandler = _serverHandler;

            Entities.WithoutBurst().ForEach(
                (ref TransformSyncData syncData, ref Translation translation, ref RotationEulerXYZ rot, in IdentityData identity, in Entity entity) =>
            {
                syncData.timeTillLastSync += deltaTime;
                if (identity.hasLocalAuthority)
                {
                    var msg = new SyncTransformMessage(null, null, false, false);
                    if (syncData.timeTillLastSync >= syncData.syncTime)
                    {
                        syncData.timeTillLastSync = 0f;
                        if (syncData.syncPosition)
                        {
                            var oldPos = new Vector3(syncData.posX, syncData.posY, syncData.posZ);
                            if (Vector3.Distance(oldPos, translation.Value) > 0.1f)
                            {
                                msg.pos = new Float4(translation.Value.x, translation.Value.y, translation.Value.z,
                                                     0);
                                syncData.posX = translation.Value.x;
                                syncData.posY = translation.Value.y;
                                syncData.posZ = translation.Value.z;
                                msg.isPos     = true;
                            }
                        }

                        if (syncData.syncRotation)
                        {
                            var oldRot = new Vector3(syncData.rotX, syncData.rotY, syncData.rotZ);
                            if (Vector3.Distance(oldRot, rot.Value) > 0.01f)
                            {
                                msg.rot       = new Float4(rot.Value.x, rot.Value.y, rot.Value.z, 0);
                                syncData.rotX = rot.Value.x;
                                syncData.rotY = rot.Value.y;
                                syncData.rotZ = rot.Value.z;
                                msg.isRot     = true;
                            }
                        }
                    }

                    if (msg.isPos || msg.isRot)
                    {
                        if (isServer)
                        {
                            serverHandler.SendToMatch("synctransform", identity.objectId, msg, identity.matchId);
                        }
                        else
                        {
                            clientHandler.SendGameData("synctransform", identity.objectId, msg);
                        }
                    }
                }
                else
                {
                    var t = syncData.timeTillLastSync / syncData.syncTime;
                    if (syncData.syncPosition)
                    {
                        if (syncData.syncPosMode == TransformSyncData.PosMode.Translation)
                        {
                            if (syncData.interpolatePosition && !isServer)
                            {
                                translation.Value =
                                    Vector3.Slerp(new Vector3(syncData.oposX, syncData.oposY, syncData.oposZ),
                                                  new Vector3(syncData.posX, syncData.posY, syncData.posZ), t);
                            }
                            else
                            {
                                translation.Value = new float3(syncData.posX, syncData.posY, syncData.posZ);
                            }
                        }
                    }

                    if (syncData.syncRotation)
                    {
                        if (syncData.syncRotMode == TransformSyncData.RotMode.Euler)
                        {
                            if (syncData.interpolateRotation && !isServer)
                            {
                                rot.Value = Vector3.Slerp(
                                    new Vector3(syncData.orotX, syncData.orotY, syncData.orotZ),
                                    new Vector3(syncData.rotX, syncData.rotY, syncData.rotZ), t);
                            }
                            else
                            {
                                rot.Value = new float3(syncData.rotX, syncData.rotY, syncData.rotZ);
                            }
                        }
                    }
                }
            }).Run();
    private void OnReceivePlayerMovementMessage(NetworkMessage _message)
    {
        SyncTransformMessage _msg = _message.ReadMessage <SyncTransformMessage>();

        NetworkServer.SendToAll(movement_msg, _msg);
    }