using System.Drawing;
using System.Numerics;
namespace Peridot;
///
/// Represetns a RGBA color with floating point values.
/// All components must be between 0.0 and 1.0.
///
public partial struct ColorF : IEquatable
{
private Vector4 m_rgba;
///
/// Constructs a new ColorF from components.
///
/// Red component.
/// Green component.
/// Blue component.
/// Alpha component.
public ColorF(float r, float g, float b, float a)
{
m_rgba = new(r, g, b, a);
}
///
/// Constructs a new ColorF from a Color.
///
/// Color.
public ColorF(Color color)
{
m_rgba = new Vector4(color.R, color.G, color.B, color.A) * (1f / 255f);
}
///
/// Constructs a new ColorF from a Vector4.
///
/// Color.
public ColorF(Vector4 color)
{
m_rgba = color;
}
///
/// Constructs a new gray color.
///
///
public ColorF(float grayColor)
{
m_rgba = new Vector4(grayColor, grayColor, grayColor, 1f);
}
///
/// Constructs a new gray color.
///
///
///
public ColorF(float grayColor, float alpha)
{
m_rgba = new Vector4(grayColor, grayColor, grayColor, alpha);
}
///
/// The red color component.
///
public float R { get => m_rgba.X; set => m_rgba.X = value; }
///
/// The green color component.
///
public float G { get => m_rgba.Y; set => m_rgba.Y = value; }
///
/// The blue color component.
///
public float B { get => m_rgba.Z; set => m_rgba.Z = value; }
///
/// The alpha color component.
///
public float A { get => m_rgba.W; set => m_rgba.W = value; }
///
/// Gets or sets components RGBA as a .
///
public Vector4 AsVector { get => m_rgba; set => m_rgba = value; }
///
public bool Equals(ColorF other)
{
return m_rgba.Equals(other.m_rgba);
}
///
public override bool Equals(object? obj)
{
return obj != null && obj is ColorF other && Equals(other);
}
///
public override int GetHashCode()
{
return m_rgba.GetHashCode();
}
///
public override string ToString()
{
return $"{{R: {R}, G: {G}, B: {B}, A: {A}}}";
}
}