Exemplo n.º 1
0
    public override VNetMessage Clone()
    {
        VNetMessageTransformControl clone = (VNetMessageTransformControl)base.Clone();

        clone.transformUID = transformUID;
        clone.clientUID    = clientUID;
        clone.requestTime  = requestTime;
        return(clone);
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    // 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);
    }
Exemplo n.º 4
0
    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;
    }
Exemplo n.º 5
0
    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!");
    }