using System; using Unity.Mathematics; namespace GamecraftModdingAPI.Blocks { public struct BlockColor { public BlockColors Color; public byte Darkness; public byte Index => Color == BlockColors.Default ? byte.MaxValue : (byte) (Darkness * 10 + Color); public BlockColor(byte index) { if (index == byte.MaxValue) { Color = BlockColors.Default; Darkness = 0; } else { if (index > 99) throw new ArgumentOutOfRangeException(nameof(index), "Invalid color index. Must be 0-90 or 255."); Color = (BlockColors) (index % 10); Darkness = (byte) (index / 10); } } public BlockColor(BlockColors color, byte darkness) { if (darkness > 9) throw new ArgumentOutOfRangeException(nameof(darkness), "Darkness must be 0-9 where 0 is default."); Color = color; Darkness = darkness; } public float4 RGBA => Block.BlockEngine.ConvertBlockColor(Index); public override string ToString() { return $"{nameof(Color)}: {Color}, {nameof(Darkness)}: {Darkness}"; } } /// /// Preset block colours /// public enum BlockColors { Default = byte.MaxValue, White = 0, Pink, Purple, Blue, Aqua, Green, Lime, Yellow, Orange, Red } }