using Penumbra.GameData.Structs; namespace Glamourer.Structs; public readonly struct Stain { public readonly string Name; public readonly uint RgbaColor; private readonly uint _seColorId; public byte R => (byte)(RgbaColor & 0xFF); public byte G => (byte)(RgbaColor >> 8 & 0xFF); public byte B => (byte)(RgbaColor >> 16 & 0xFF); public byte Intensity => (byte)((1 + R + G + B) / 3); public uint SeColor => _seColorId & 0x00FFFFFF; public StainId RowIndex => (StainId)(_seColorId >> 24); public static uint SeColorToRgba(uint color) => (color & 0xFF) << 16 | color >> 16 & 0xFF | color & 0xFF00 | 0xFF000000; public Stain(byte index, Lumina.Excel.GeneratedSheets.Stain stain) { Name = stain.Name.ToString(); _seColorId = stain.Color | (uint)index << 24; RgbaColor = SeColorToRgba(stain.Color); } public static readonly Stain None = new("None"); private Stain(string name) { Name = name; _seColorId = 0; RgbaColor = 0; } }