using System;
using UnityEngine;

namespace wf
{
	public struct HSVColor
	{
		public HSVColor(Color color)
		{
			int num = (int)Mathf.Floor(255f * color.r);
			int num2 = (int)Mathf.Floor(255f * color.g);
			int num3 = (int)Mathf.Floor(255f * color.b);
			int num4 = Math.Max(Math.Max(num, num2), num3);
			int num5 = Math.Min(Math.Min(num, num2), num3);
			this.h = 0f;
			if (num4 == num5)
			{
				this.h = 0f;
			}
			else if (num4 == num)
			{
				this.h = (60f * (float)(num2 - num3) / (float)(num4 - num5) + 360f) % 360f;
			}
			else if (num4 == num2)
			{
				this.h = (float)(60 * (num3 - num) / (num4 - num5) + 120);
			}
			else if (num4 == num3)
			{
				this.h = (float)(60 * (num - num2) / (num4 - num5) + 240);
			}
			this.s = ((num4 != 0) ? ((float)(num4 - num5) / (float)num4) : 0f);
			this.v = (float)num4 / 255f;
		}

		public Color ToColor()
		{
			float num = Mathf.Max(0f, this.h);
			float num2 = Mathf.Clamp(this.s, 0f, 1f);
			float num3 = Mathf.Clamp(this.v, 0f, 1f);
			if (num2 == 0f)
			{
				return new Color(num3, num3, num3);
			}
			float r = 0f;
			float g = 0f;
			float b = 0f;
			float num4 = num % 360f / 60f;
			int num5 = (int)Math.Floor((double)num4);
			float num6 = num4 - (float)num5;
			float num7 = num3 * (1f - num2);
			float num8;
			if (num5 % 2 == 0)
			{
				num8 = num3 * (1f - (1f - num6) * num2);
			}
			else
			{
				num8 = num3 * (1f - num6 * num2);
			}
			switch (num5)
			{
			case 0:
				r = num3;
				g = num8;
				b = num7;
				break;
			case 1:
				r = num8;
				g = num3;
				b = num7;
				break;
			case 2:
				r = num7;
				g = num3;
				b = num8;
				break;
			case 3:
				r = num7;
				g = num8;
				b = num3;
				break;
			case 4:
				r = num8;
				g = num7;
				b = num3;
				break;
			case 5:
				r = num3;
				g = num7;
				b = num8;
				break;
			}
			return new Color(r, g, b);
		}

		public float h;

		public float s;

		public float v;
	}
}
