mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-12 18:27:24 +01:00
45 lines
1.3 KiB
C#
45 lines
1.3 KiB
C#
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<CustomizeData>
|
|
{
|
|
[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);
|
|
}
|