Example #1
0
        private void WriteDeltaUsercmdKey(int key, UserCommand from, ref UserCommand to)
        {
            if (to.serverTime - from.serverTime < 256)
            {
                q3HuffCStream.WriteBits(1, 1);
                q3HuffCStream.WriteByte(( byte )(to.serverTime - from.serverTime));
            }
            else
            {
                q3HuffCStream.WriteBits(0, 1);
                q3HuffCStream.WriteInt32(to.serverTime);
            }
            if (from.angles [0] == to.angles [0] &&
                from.angles [1] == to.angles [1] &&
                from.angles [2] == to.angles [2] &&
                from.forwardmove == to.forwardmove &&
                from.rightmove == to.rightmove &&
                from.upmove == to.upmove &&
                from.buttons == to.buttons &&
                from.weapon == to.weapon)
            {
                q3HuffCStream.WriteBits(0, 1);                                                          // no change

                return;
            }

            key ^= to.serverTime;
            q3HuffCStream.WriteBits(1, 1);
            WriteDeltaKey(key, from.angles [0], to.angles [0], 16);
            WriteDeltaKey(key, from.angles [1], to.angles [1], 16);
            WriteDeltaKey(key, from.angles [2], to.angles [2], 16);
            WriteDeltaKey(key, from.forwardmove, to.forwardmove, 8);
            WriteDeltaKey(key, from.rightmove, to.rightmove, 8);
            WriteDeltaKey(key, from.upmove, to.upmove, 8);
            WriteDeltaKey(key, from.buttons, to.buttons, 16);
            WriteDeltaKey(key, ( byte )from.weapon, ( byte )to.weapon, 8);
        }