Ejemplo n.º 1
0
        /// <summary>
        /// Handle received synchronization message.
        /// </summary>
        /// <param name="msg">The received synchronization message.</param>
        public void HandleSynchronize(Messages.PlayerSyncMessage msg)
        {
            Client.Assert(state == State.OnFoot,
                          "Received on foot update but player is not on foot.");

            Vector3    targetPos = Utils.NetVec3ToGame(msg.position);
            Quaternion targetRot = Utils.NetQuatToGame(msg.rotation);

            interpolator.SetTarget(targetPos, targetRot);
            syncReceiveTime = netManager.GetNetworkClock();

            if (msg.HasPickedUpData)
            {
                var pickedUpData = msg.PickedUpData;
                pickedUpObjectInterpolator.SetTarget(
                    Utils.NetVec3ToGame(pickedUpData.position),
                    Utils.NetQuatToGame(pickedUpData.rotation));
            }

            if (!IsSpawned)
            {
                Teleport(targetPos, targetRot);
                return;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Send on foot sync to the server.
        /// </summary>
        /// <returns>true if sync message was sent false otherwise</returns>
        private bool SendOnFootSync()
        {
            GamePlayer player = GameWorld.Instance.Player;

            if (player == null)
            {
                return(false);
            }
            GameObject playerObject = player.Object;

            if (playerObject == null)
            {
                return(false);
            }

            Messages.PlayerSyncMessage message = new Messages.PlayerSyncMessage();

            message.position = Utils.GameVec3ToNet(playerObject.transform.position);
            message.rotation = Utils.GameQuatToNet(playerObject.transform.rotation);

            if (player.PickedUpObject)
            {
                Transform objectTrans = player.PickedUpObject.transform;
                var       data        = new Messages.PickedUpSync();
                data.position = Utils.GameVec3ToNet(objectTrans.position);
                data.rotation = Utils.GameQuatToNet(objectTrans.rotation);

                message.PickedUpData = data;
            }

            if (!netManager.BroadcastMessage(
                    message, Steamworks.EP2PSend.k_EP2PSendUnreliable))
            {
                return(false);
            }

            timeToUpdate = (float)SYNC_INTERVAL / 1000;
            return(true);
        }