/// <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; } }
/// <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); }