Barotrauma Client Doc
ColorExtensions.cs
1 using Microsoft.Xna.Framework;
2 
4 {
5  public static class ColorExtensions
6  {
7  public static Color Multiply(this Color color, float value, bool onlyAlpha = false)
8  {
9  return onlyAlpha ?
10  new Color(color.R, color.G, color.B, (byte)(color.A * value)) :
11  new Color((byte)(color.R * value), (byte)(color.G * value), (byte)(color.B * value), (byte)(color.A * value));
12  }
13 
14  public static Color Multiply(this Color thisColor, Color color)
15  {
16  return new Color((byte)(thisColor.R * color.R / 255f), (byte)(thisColor.G * color.G / 255f), (byte)(thisColor.B * color.B / 255f), (byte)(thisColor.A * color.A / 255f));
17  }
18 
19  public static Color Opaque(this Color color)
20  {
21  return new Color(color.R, color.G, color.B, (byte)255);
22  }
23 
24  private static bool IsFirstColorChannelDominant(byte first, byte second, byte third, float minimumRatio = 2)
25  => first > second * minimumRatio && first > third * minimumRatio;
26 
30  public static bool IsRedDominant(Color color, float minimumRatio = 2, byte minimumAlpha = 0)
31  => color.A > minimumAlpha &&
32  IsFirstColorChannelDominant(
33  first: color.R,
34  color.G, color.B, minimumRatio);
35 
39  public static bool IsGreenDominant(Color color, float minimumRatio = 2, byte minimumAlpha = 0)
40  => color.A > minimumAlpha &&
41  IsFirstColorChannelDominant(
42  first: color.G,
43  color.R, color.B, minimumRatio);
44 
48  public static bool IsBlueDominant(Color color, float minimumRatio = 2, byte minimumAlpha = 0)
49  => color.A > minimumAlpha &&
50  IsFirstColorChannelDominant(
51  first: color.B,
52  color.G, color.R, minimumRatio);
53  }
54 }