//public static Quaternion ExtrapolateQuaternion (Quaternion a, Quaternion b, float t)
    //{
    //    Quaternion rot = b * Quaternion.Inverse(a);
    //    float ang = 0.0f;
    //    Vector3 axis = Vector3.zero;
    //    rot.ToAngleAxis(out ang, out axis);
    //    if (ang > 180)
    //        ang -= 360;
    //    ang = ang * t % 360;
    //    return Quaternion.AngleAxis(ang, axis) * a;
    //}
    public static void ApplyRewindToElements(NetworkSyncTransform nst, FrameElements rewind)
    {
        nst.rewindGO.transform.position = rewind.rootPosition;

        for (int i = 0; i < nst.positionElements.Count; i++)
        {
            nst.positionElements[i].ApplyPosition(rewind.positionsElements[i], nst.positionElements[i].rewindGO);
        }

        for (int i = 0; i < nst.rotationElements.Count; i++)
        {
            nst.rotationElements[i].ApplyRotation(rewind.rotationElements[i], nst.rotationElements[i].rewindGO);
        }
    }
Exemplo n.º 2
0
        /// <summary>
        /// Apply this when the end of an interpolation has happened, or when the local object sends out its regular frame update.
        /// </summary>
        public void SnapshotToRewind(int index)
        {
            FrameElements frame = rewind[index];

            frame.endTime = Time.time;
            //frame.endTime = currentFrame.endTime; // Time.time;
            frame.rootPosition = nst.transform.position;

            for (int i = 0; i < frame.positionsElements.Count; i++)
            {
                frame.positionsElements[i] = nst.positionElements[i].Localized;
            }

            for (int i = 0; i < frame.rotationElements.Count; i++)
            {
                frame.rotationElements[i] = nst.rotationElements[i].Localized;
            }

            latestRewindFrame = frame;
        }
Exemplo n.º 3
0
        // Construct
        public FrameBuffer(NetworkSyncTransform _nst, int _size, Vector3 _pos)
        {
            nst = _nst;

            bufferSize       = _size;
            halfBufferSize   = (bufferSize - 1) / 2;
            quaterBufferSize = bufferSize / 3;

            frames = new Frame[bufferSize];
            rewind = new FrameElements[bufferSize];

            for (int i = 0; i < bufferSize; i++)
            {
                frames[i] = new Frame(i, _pos, nst.positionElements, nst.rotationElements);
                rewind[i] = new FrameElements(i, _pos, nst.positionElements, nst.rotationElements);                 // currently unused
            }

            currentFrame      = frames[0];
            prevAppliedFrame  = frames[0];
            latestRewindFrame = rewind[0];
        }