コード例 #1
0
        public static void ProcessPacket(FastList<byte> packet)
        {
            if (packet == null || packet.Count < 4) {
                throw new System.Exception("Packet is null or not valid length");
            }
            int frameCount = BitConverter.ToInt32 (packet.innerArray, 0);
            int index = 4;

            if (FrameManager.HasFrame (frameCount) == false) {
                Frame frame = new Frame ();

                if (packet.Count > 4) {
                    RecordedBytes.AddRange (BitConverter.GetBytes ((ushort)packet.Count));
                    RecordedBytes.AddRange (packet);
                    while (index < packet.Count) {
                        Command com = new Command ();
                        index += com.Reconstruct (packet.innerArray, index);
                        frame.AddCommand (com);
                    }
                    if (frameCount > LastCommandedFrameCount) {
                        LastCommandedFrameCount = frameCount;
                    }
                }
                FrameManager.AddFrame (frameCount, frame);

            } else {

            }
        }
コード例 #2
0
        public static void Simulate()
        {
            if (Offline) {
                    ReceivedBytes.AddRange (BitConverter.GetBytes (LockstepManager.FrameCount));
                    for (i = 0; i < OutCommands.Count; i++) {
                        ReceivedBytes.AddRange (OutCommands [i].Serialized);
                    }
                    AllReceivedBytes.AddRange (BitConverter.GetBytes (ReceivedBytes.Count));
                    AllReceivedBytes.AddRange (ReceivedBytes);
            } else {

            }

            int frameCount = BitConverter.ToInt32 (ReceivedBytes.innerArray, 0);
            Index = 4;

            FrameManager.EnsureCapacity (frameCount + 1);

            Frame frame;
            if (!FrameManager.HasFrame [frameCount]) {
                frame = new Frame ();
                FrameManager.AddFrame (frameCount, frame);

                while (Index < ReceivedBytes.Count) {
                    Command com = new Command ();
                    Index += com.Reconstruct (ReceivedBytes.innerArray, Index);
                    frame.AddCommand (com);
                }
            }

            ReceivedBytes.FastClear ();
            OutCommands.FastClear ();
        }
コード例 #3
0
        public static void AddFrame(int frameCount, Frame frame)
        {
            EnsureCapacity(frameCount + 1);
            frames [frameCount] = frame;
            hasFrame [frameCount] = true;

            while (HasFrame (nextFrame))
            {
                ForeSight++;
                nextFrame++;
            }
        }
コード例 #4
0
        public static void AddFrame(int index, Frame frame)
        {
            Frames[index] = frame;
            HasFrame[index] = true;

            if (index == NextFrame) {
                ForeSight++;
                NextFrame++;
                while (NextFrame < Capacity && HasFrame[NextFrame])
                {
                    NextFrame++;
                }
            }
        }
コード例 #5
0
        public static void Simulate()
        {
            if (IterationCount == 0) {
                switch (sendState) {
                case SendState.Autosend:
                    ReceivedBytes.AddRange (BitConverter.GetBytes (LockstepManager.FrameCount));
                    for (i = 0; i < OutCommands.Count; i++) {
                        ReceivedBytes.AddRange (OutCommands [i].Serialized);
                    }
                    break;
                }

                if (ReceivedBytes.Count < 4)
                    return;

                int frameCount = BitConverter.ToInt32 (ReceivedBytes.innerArray, 0);
                Index = 4;

                FrameManager.EnsureCapacity (frameCount + 1);

                Frame frame;
                if (!FrameManager.HasFrame [frameCount]) {
                    ReceivedFrameCount++;
                    if (ReceivedBytes.Count > 4) {

                        RecordedBytes.AddRange (BitConverter.GetBytes ((ushort)ReceivedBytes.Count));
                        RecordedBytes.AddRange (ReceivedBytes);
                        LastRecordedFrame = ReceivedFrameCount;
                    }

                    frame = new Frame ();
                    FrameManager.AddFrame (frameCount, frame);

                    while (Index < ReceivedBytes.Count) {
                        Command com = new Command ();
                        Index += com.Reconstruct (ReceivedBytes.innerArray, Index);
                        frame.AddCommand (com);
                    }
                }

                ReceivedBytes.FastClear ();
                OutCommands.FastClear ();

                IterationCount = LockstepManager.NetworkingIterationSpread - 1;
            } else {
                IterationCount--;
                FrameManager.AddFrame (LockstepManager.FrameCount, new Frame ());
            }
        }