Exemplo n.º 1
0
        /// <summary>
        /// 判断与比较值不相同的情况下,将当前值写入Wirter
        /// </summary>
        /// <param name="comparedInfo"></param>
        /// <param name="writer"></param>
        public void Write(WeaponBagContainer comparedInfo, MyBinaryWriter writer)
        {
            writer.Write(HeldSlotPointer);
            writer.Write(LastSlotPointer);
            BitArrayWrapper bitArray = BitArrayWrapper.Allocate(GameGlobalConst.WeaponSlotMaxLength, false);

            //  return new BitArray(5, true);
            if (comparedInfo == null)
            {
                bitArray.SetAll(true);
            }
            else
            {
                for (int i = 0; i < GameGlobalConst.WeaponSlotMaxLength; i++)
                {
                    bitArray[i] = slotWeapons[i] != comparedInfo.slotWeapons[i];
                }
            }

            writer.Write(bitArray);
            for (int i = 0; i < GameGlobalConst.WeaponSlotMaxLength; i++)
            {
                if (bitArray[i])
                {
                    writer.Write(slotWeapons[i].WeaponKey.EntityId);
                    writer.Write(slotWeapons[i].WeaponKey.EntityType);
                }
            }


            bitArray.ReleaseReference();
        }
Exemplo n.º 2
0
        public void Write(NetworkAnimatorLayer right, MyBinaryWriter writer)
        {
            BitArrayWrapper bitArray = BitArrayWrapper.Allocate(7, false);

            if (right == null)
            {
                bitArray.SetAll(true);
            }
            else
            {
                bitArray[0] = !CompareUtility.IsApproximatelyEqual(LayerIndex, right.LayerIndex);
                bitArray[1] = Weight != right.Weight;
                bitArray[2] = !CompareUtility.IsApproximatelyEqual(CurrentStateHash, right.CurrentStateHash);
                bitArray[3] = NormalizedTime != right.NormalizedTime;
                bitArray[4] = StateDuration != right.StateDuration;
                bitArray[5] = TransitionNormalizedTime != right.TransitionNormalizedTime;
                bitArray[6] = TransitionDuration != right.TransitionDuration;
            }

            writer.Write(bitArray);
            if (bitArray[0])
            {
                writer.Write(LayerIndex);
            }
            if (bitArray[1])
            {
                writer.Write(Weight);
            }
            if (bitArray[2])
            {
                writer.Write(CurrentStateHash);
            }
            if (bitArray[3])
            {
                writer.Write(NormalizedTime);
            }
            if (bitArray[4])
            {
                writer.Write(StateDuration);
            }
            if (bitArray[5])
            {
                writer.Write(TransitionNormalizedTime);
            }
            if (bitArray[6])
            {
                writer.Write(TransitionDuration);
            }


            bitArray.ReleaseReference();
        }
Exemplo n.º 3
0
        public void Write(NetworkAnimatorParameter right, MyBinaryWriter writer)
        {
            BitArrayWrapper bitArray = BitArrayWrapper.Allocate(5, false);

            //  return new BitArray(5, true);
            if (right == null)
            {
                bitArray.SetAll(true);
            }
            else
            {
                bitArray[0] = ParamType != right.ParamType;
                bitArray[1] = !CompareUtility.IsApproximatelyEqual(NameHash, right.NameHash);
                bitArray[2] = !CompareUtility.IsApproximatelyEqual(BoolValue, right.BoolValue);
                bitArray[3] = !CompareUtility.IsApproximatelyEqual(FloatValue, right.FloatValue, 0.0001f);
                bitArray[4] = !CompareUtility.IsApproximatelyEqual(IntValue, right.IntValue);
            }

            writer.Write(bitArray);
            if (bitArray[0])
            {
                writer.Write((byte)ParamType);
            }
            if (bitArray[1])
            {
                writer.Write(NameHash);
            }
            if (bitArray[2])
            {
                writer.Write(BoolValue);
            }
            if (bitArray[3])
            {
                writer.Write(FloatValue);
            }
            if (bitArray[4])
            {
                writer.Write(IntValue);
            }


            bitArray.ReleaseReference();
        }
Exemplo n.º 4
0
        private static BitArrayWrapper GetDiffBitArray <T>(T[] last, T[] data, bool writeAll)
            where T : IPatchClass <T>, new()
        {
            var count     = data == null ? 0 : data.Length;
            var lastCount = last == null ? 0 : last.Length;

            if (writeAll)
            {
                return(BitArrayWrapper.Allocate(count, true));
            }
            BitArrayWrapper ret = BitArrayWrapper.Allocate(count, false);

            for (int i = 0; i < count; i++)
            {
                ret[i] = i >= lastCount || !data[i].IsSimilar(
                    last[i]);
            }

            return(ret);
        }
Exemplo n.º 5
0
        public static BitArrayWrapper ReadBitArray(this BinaryReader binaryReader)
        {
            int             count    = binaryReader.ReadByte();
            BitArrayWrapper bitArray = BitArrayWrapper.Allocate(count);

            if (count != 0)
            {
                byte b = 0;
                for (int i = 0; i < count; i++)
                {
                    if (i % 8 == 0)
                    {
                        b = binaryReader.ReadByte();
                    }
                    bitArray[i] = (b & (1 << (i % 8))) != 0;
                }
            }

            return(bitArray);
        }