public override VNetMessage Clone() { VNetMessageTransformControl clone = (VNetMessageTransformControl)base.Clone(); clone.transformUID = transformUID; clone.clientUID = clientUID; clone.requestTime = requestTime; return(clone); }
public bool TakeLocalControl() { if (isLocalControlled) { return(true); } if (isRemoteControlled) { return(false); } localControlStartTime = VNetSessionTime.Inst.GetServerTime(); isLocalControlled = true; TransformTrack track = new TransformTrack(); track.netTime = VNetSessionTime.Inst.GetServerTime() - VNetManager.Inst.TransformUpdateDelay * 2; track.pos = transform.localPosition; track.rot = transform.localRotation; if (rigidBody) { track.angularVel = rigidBody.angularVelocity; track.vel = rigidBody.velocity; track.isSleeping = rigidBody.IsSleeping(); } m_clientPrev = track; track = new TransformTrack(); track.netTime = VNetSessionTime.Inst.GetServerTime() - VNetManager.Inst.TransformUpdateDelay; track.pos = transform.localPosition; track.rot = transform.localRotation; if (rigidBody) { track.angularVel = rigidBody.angularVelocity; track.vel = rigidBody.velocity; track.isSleeping = rigidBody.IsSleeping(); } m_clientPost = track; VNetMessageTransformControl controlMessage = new VNetMessageTransformControl(); controlMessage.transformUID = netIdentifier; controlMessage.clientUID = VNet.Inst.GetUID(); controlMessage.requestTime = localControlStartTime; controllingClient = VNet.Inst.GetUID(); VNet.Inst.SendToLobby(controlMessage, true); return(true); }
// Tell a transform that it's control was changed public void OnTransformControlMessage(VNetMessageTransformControl message) { if (m_networkTransforms.ContainsKey(message.transformUID) == false) { return; } VNetTransform trans = m_networkTransforms [message.transformUID]; if (message.clientUID == VNetCommon.NET_CLIENT_INVALID_UID && message._client.GetUID() == trans.controllingClient) { trans.RemoteRevokeControl(); return; } trans.RemoteTakeControl(message.requestTime, message.clientUID); }
public void RevokeLocalControl() { if (!isLocalControlled || isRemoteControlled) { return; } VNetMessageTransformControl controlMessage = new VNetMessageTransformControl(); controlMessage.transformUID = netIdentifier; controlMessage.clientUID = VNetCommon.NET_CLIENT_INVALID_UID; controlMessage.requestTime = VNetSessionTime.Inst.GetServerTime(); VNet.Inst.SendToLobby(controlMessage, true); isLocalControlled = false; localControlStartTime = 0; controllingClient = VNetCommon.NET_CLIENT_INVALID_UID; }
public void OnNewClient(VNetClient clientUID) { int numSynced = 0; VNetMessageTransformControl controlMessage = new VNetMessageTransformControl(); foreach (VNetTransform trans in m_networkTransforms.Values) { if (trans.controllingClient != VNet.Inst.GetUID()) { continue; } controlMessage.transformUID = trans.netIdentifier; controlMessage.clientUID = VNet.Inst.GetUID(); controlMessage.requestTime = trans.localControlStartTime; numSynced++; clientUID.SendNetMessage(controlMessage, true); } Debug.Log("Syncing " + numSynced + " VNetTransforms for new client!"); }