Exemplo n.º 1
0
        public override void Tick(ref RecordData data)
        {
            base.Tick(ref data);

            Results temp = controller.GetResults();

            controller.WriteResults(writer, ref temp, bMaskV4);
            if (controller.writeVarValues != null)
            {
                controller.writeVarValues(writer, true);
            }

            if (temp.flags & Flags.RAGDOLL)
            {
                ragdollManager.GetBoneTransforms(ref bonePositions, ref boneRotations);
                writer.WritePackedUInt32((uint)bonePositions.Length);
                for (int i = 0; i < bonePositions.Length; i++)
                {
                    writer.Write(bonePositions [i]);
                    writer.Write(boneRotations [i]);
                }
            }

            data.bytes = writer.AsArray();
        }
Exemplo n.º 2
0
 public void PlayTick(RecordData startRes, RecordData endRes, int sendUpdates, float speed, uint version)
 {
     if (recordInterface != null)
     {
         recordInterface.SetData(startRes, endRes, sendUpdates, speed, version);
     }
 }
Exemplo n.º 3
0
        //Read the start and end bytes to positions and rotations
        public virtual void SetData(RecordData dataStart, RecordData dataEnd, int sUpdates, float tTime, uint version)
        {
            readerStart = new NetworkReader(dataStart.bytes);
            posStart    = readerStart.ReadVector3();
            rotStart    = readerStart.ReadQuaternion();

            readerEnd = new NetworkReader(dataEnd.bytes);
            posEnd    = readerEnd.ReadVector3();
            rotEnd    = readerEnd.ReadQuaternion();

            if (tTime == -1f)
            {
                transform.position = posEnd;
                transform.rotation = rotEnd;
            }
            else
            {
                playBack      = true;
                sendUpdates   = sUpdates;
                targetTime    = Time.fixedDeltaTime * sendUpdates;
                targetTimeMul = 1f / targetTime;
                startTime     = Time.time;
                playbackSpeed = tTime;
            }
        }
Exemplo n.º 4
0
        public override void SetData(RecordData dataStart, RecordData dataEnd, int sUpdates, float tTime, uint version)
        {
            base.SetData(dataStart, dataEnd, sUpdates, tTime, version);

            resStart = resEnd;
            switch (version)
            {
            case 1:
                resEnd = new Results(transform.position, transform.rotation, new Vector3(0, 0, 0), readerEnd.ReadSingle(), readerEnd.ReadVector3(), (readerEnd.ReadBoolean() ? Flags.IS_GROUNDED : 0) | (readerEnd.ReadBoolean() ? Flags.JUMPED : 0) | (readerEnd.ReadBoolean() ? Flags.CROUCHED : 0) | Flags.AI_ENABLED, 0f, 0f, 0, readerEnd.ReadPackedUInt32());
                break;

            case 2:
                resEnd = new Results(transform.position, transform.rotation, new Vector3(0, 0, 0), readerEnd.ReadSingle(), readerEnd.ReadVector3(), (readerEnd.ReadBoolean() ? Flags.IS_GROUNDED : 0) | (readerEnd.ReadBoolean() ? Flags.JUMPED : 0) | (readerEnd.ReadBoolean() ? Flags.CROUCHED : 0) | (readerEnd.ReadBoolean() ? Flags.RAGDOLL : 0) | Flags.AI_ENABLED, 0f, 0f, 0, readerEnd.ReadPackedUInt32());
                if (resEnd.flags & Flags.RAGDOLL)
                {
                    uint bL = readerEnd.ReadPackedUInt32();
                    bonePositions = new Vector3 [bL];
                    boneRotations = new Quaternion [bL];
                    for (uint i = 0; i < bL; i++)
                    {
                        bonePositions [i] = readerEnd.ReadVector3();
                        boneRotations [i] = readerEnd.ReadQuaternion();
                    }
                    ragdollManager.SetTargetBoneTransforms(bonePositions, boneRotations);
                    //if (tTime == -1f)
                    //	ragdollManager.UpdateRagdoll();
                }
                break;

            default:
                resEnd = new Results(transform.position, transform.rotation, new Vector3(0, 0, 0), 0f, new Vector3(0, 0, 0), 0u, 0f, 0f, 0, 0u);

                controller.ReadResults(readerEnd, ref resEnd, version == 3 ? bMaskV3 : bMaskV4);

                if (controller.readVarValues != null)
                {
                    controller.readVarValues(readerEnd, 0, true, true);
                }

                if (resEnd.flags & Flags.RAGDOLL)
                {
                    uint bL = readerEnd.ReadPackedUInt32();
                    bonePositions = new Vector3[bL];
                    boneRotations = new Quaternion[bL];
                    for (uint i = 0; i < bL; i++)
                    {
                        bonePositions[i] = readerEnd.ReadVector3();
                        boneRotations[i] = readerEnd.ReadQuaternion();
                    }
                    ragdollManager.SetTargetBoneTransforms(bonePositions, boneRotations);
                    //if (tTime == -1f)
                    //	ragdollManager.UpdateRagdoll();
                }
                break;
            }

            controller.PlaybackSetResults(resStart, resEnd, sendUpdates, playbackSpeed);
        }
Exemplo n.º 5
0
        public override void SetData(RecordData dataStart, RecordData dataEnd, int sUpdates, float tTime)
        {
            base.SetData(dataStart, dataEnd, sUpdates, tTime);

            resStart = resEnd;
            resEnd   = new Results(transform.position, transform.rotation, new Vector3(0, 0, 0), readerEnd.ReadSingle(), readerEnd.ReadVector3(), readerEnd.ReadBoolean(), readerEnd.ReadBoolean(), readerEnd.ReadBoolean(), 0f, 0f, new Vector3(0, 0, 0), true, false, readerEnd.ReadPackedUInt32());

            controller.PlaybackSetResults(resStart, resEnd, sendUpdates, playbackSpeed);
        }
Exemplo n.º 6
0
        public static void BacktrackObject(ObjectData obj, uint tick)
        {
            if (tick == 0 && obj.needsRestore)
            {
                obj.needsRestore = false;
                obj.component.PlayTick(obj.restoreData, obj.restoreData, GameManager.sendUpdates, -1f, GameManager.DEMO_VERSION);
            }
            else if (tick == 0)
            {
                return;
            }
            obj.needsRestore = true;

            if (obj.component.recordInterface != null)
            {
                obj.component.recordInterface.Tick(ref obj.restoreData);
            }

            int sz = obj.ticks.Count;

            RecordData restoreData     = new RecordData();
            bool       foundClosest    = false;
            uint       closestTickDiff = 99999999;

            for (int i = sz - 1; i >= 0; i--)
            {
                RecordData curData = obj.ticks[i];
                uint       tDiff   = 0;
                if (curData.timestamp > tick)
                {
                    tDiff = curData.timestamp - tick;
                }
                else
                {
                    tDiff = tick - curData.timestamp;
                }

                if (tDiff < closestTickDiff)
                {
                    closestTickDiff = tDiff;
                    restoreData     = curData;
                    foundClosest    = true;
                }
                else
                {
                    break;
                }
            }

            //Debug.Log(closestTickDiff);

            Debug.Assert(foundClosest || obj.ticks.Count == 0, "Supposed to be able to find closest tick, but were not.");

            obj.component.PlayTick(restoreData, restoreData, GameManager.sendUpdates, -1f, GameManager.DEMO_VERSION);
        }
Exemplo n.º 7
0
        public override void Tick(ref RecordData data)
        {
            base.Tick(ref data);

            Results temp = controller.GetResults();

            writer.Write(temp.camX);
            writer.Write(temp.speed);
            writer.Write(temp.isGrounded);
            writer.Write(temp.jumped);
            writer.Write(temp.crouch);
            writer.WritePackedUInt32(temp.timestamp);
            data.bytes = writer.AsArray();
        }
 //Write the position and rotation to the data structure
 public virtual void Tick(ref RecordData data)
 {
     if (writer == null)
     {
         writer = new NetworkWriter();
     }
     else
     {
         writer.SeekZero();
     }
     writer.Write(transform.position);
     writer.Write(transform.rotation);
     data.bytes = writer.AsArray();
 }
Exemplo n.º 9
0
        public static void ObjectTick(RecordableObject obj, RecordData res)
        {
            if (obj.gmIndex == -1)
            {
                RegisterObject(obj);
            }

            if (recording)
            {
                if (objects [obj.gmIndex].ticks == null)
                {
                    objects [obj.gmIndex].ticks = new List <RecordData> ();
                }
                objects [obj.gmIndex].ticks.Add(res);
            }
        }
        //Read the start and end bytes to positions and rotations
        public virtual void SetData(RecordData dataStart, RecordData dataEnd, int sUpdates, float tTime)
        {
            readerStart = new NetworkReader(dataStart.bytes);
            posStart    = readerStart.ReadVector3();
            rotStart    = readerStart.ReadQuaternion();

            readerEnd = new NetworkReader(dataEnd.bytes);
            posEnd    = readerEnd.ReadVector3();
            rotEnd    = readerEnd.ReadQuaternion();

            playBack      = true;
            sendUpdates   = sUpdates;
            targetTime    = Time.fixedDeltaTime * sendUpdates;
            targetTimeMul = 1f / targetTime;
            startTime     = Time.time;
            playbackSpeed = tTime;
        }
Exemplo n.º 11
0
        //Write the position and rotation to the data structure
        public virtual void Tick(ref RecordData data)
        {
            if (writer == null)
            {
                writer = new NetworkWriter();
            }
            else
#if ENABLE_MIRROR
            { writer.Position = 0; }
#else
            { writer.SeekZero(); }
#endif
            writer.Write(transform.position);
            writer.Write(transform.rotation);
#if ENABLE_MIRROR
            data.bytes = writer.ToArray();
#else
            data.bytes = writer.AsArray();
#endif
        }
Exemplo n.º 12
0
        public static void ObjectTick(RecordableObject obj, RecordData res)
        {
            if (obj.gmIndex == -1)
            {
                RegisterObject(obj);
            }

            if (objects [obj.gmIndex].ticks == null)
            {
                objects [obj.gmIndex].ticks = new List <RecordData> ();
            }
            objects [obj.gmIndex].ticks.Add(res);

            //If not recording, only keep a set amount of history data
            if (!recording)
            {
                while (objects[obj.gmIndex].ticks.Count > 0 && (float)(res.timestamp - objects[obj.gmIndex].ticks[0].timestamp) * sendDiv * Time.fixedDeltaTime > settings.lagCompensationAmount)
                {
                    objects[obj.gmIndex].ticks.RemoveAt(0);
                }
            }
        }
Exemplo n.º 13
0
 public void PlayTick(RecordData startRes, RecordData endRes, int sendUpdates, float speed)
 {
     recordInterface.SetData(startRes, endRes, sendUpdates, speed);
 }