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); }