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