using System; using System.Runtime.InteropServices; namespace Glamourer.Customization; // Any customization value can be represented in 8 bytes by its ID, // a byte value, an optional value-id and an optional icon or color. [StructLayout(LayoutKind.Explicit)] public readonly struct CustomizeData : IEquatable { [FieldOffset(0)] public readonly CustomizeIndex Index; [FieldOffset(1)] public readonly CustomizeValue Value; [FieldOffset(2)] public readonly ushort CustomizeId; [FieldOffset(4)] public readonly uint IconId; [FieldOffset(4)] public readonly uint Color; public CustomizeData(CustomizeIndex index, CustomizeValue value, uint data = 0, ushort customizeId = 0) { Index = index; Value = value; IconId = data; Color = data; CustomizeId = customizeId; } public bool Equals(CustomizeData other) => Index == other.Index && Value.Value == other.Value.Value && CustomizeId == other.CustomizeId; public override bool Equals(object? obj) => obj is CustomizeData other && Equals(other); public override int GetHashCode() => HashCode.Combine((int)Index, Value.Value, CustomizeId); }