public static bool Equal(this ImcFile.ImageChangeData lhs, ImcFile.ImageChangeData rhs) => lhs.MaterialId == rhs.MaterialId && lhs.DecalId == rhs.DecalId && lhs.AttributeMask == rhs.AttributeMask && lhs.SoundId == rhs.SoundId && lhs.VfxId == rhs.VfxId && lhs.MaterialAnimationId == rhs.MaterialAnimationId;
public static byte ActualMaterialAnimationId(this ImcFile.ImageChangeData imc) { var tmp = imc.GetType().GetField("_MaterialAnimationIdMask", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); return(( byte )(tmp?.GetValue(imc) ?? 0)); }
private static void WriteBytes(this ImcFile.ImageChangeData variant, BinaryWriter bw) { bw.Write(variant.MaterialId); bw.Write(variant.DecalId); bw.Write(( ushort )(variant.AttributeMask | variant.SoundId)); bw.Write(variant.VfxId); bw.Write(variant.ActualMaterialAnimationId()); }
public static ulong ToInteger(this ImcFile.ImageChangeData imc) { ulong ret = imc.MaterialId; ret |= ( ulong )imc.DecalId << 8; ret |= ( ulong )imc.AttributeMask << 16; ret |= ( ulong )imc.SoundId << 16; ret |= ( ulong )imc.VfxId << 32; ret |= ( ulong )imc.ActualMaterialAnimationId() << 40; return(ret); }
public static ImcFile.ImageChangeData FromValues(byte materialId, byte decalId, ushort attributeMask, byte soundId, byte vfxId, byte materialAnimationId) { var ret = new ImcFile.ImageChangeData() { DecalId = decalId, MaterialId = materialId, VfxId = vfxId, }; ret.GetType().GetField("_AttributeAndSound", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) ! .SetValue(ret, ( ushort )((attributeMask & 0x3FF) | (soundId << 10))); ret.GetType().GetField("_AttributeAndSound", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) !.SetValue(ret, materialAnimationId); return(ret); }