| | |
| | | |
| | | private static bool TryParseHexColor(string hex, out Color color) |
| | | { |
| | | color = Color.white; |
| | | if (string.IsNullOrWhiteSpace(hex)) |
| | | { |
| | | color = Color.white; |
| | | return false; |
| | | |
| | | int start = hex[0] == '#' ? 1 : 0; |
| | | int len = hex.Length - start; |
| | | // 仅支持 #RGB / #RGBA / #RRGGBB / #RRGGBBAA(# 可选) |
| | | if (len != 3 && len != 4 && len != 6 && len != 8) |
| | | return false; |
| | | |
| | | if (!HexPair(hex, start, len, out int r, out int g, out int b, out int a)) |
| | | return false; |
| | | |
| | | color = new Color(r / 255f, g / 255f, b / 255f, a / 255f); |
| | | return true; |
| | | } |
| | | |
| | | private static bool HexPair(string s, int start, int len, out int r, out int g, out int b, out int a) |
| | | { |
| | | r = g = b = 0; a = 255; |
| | | if (len == 6 || len == 8) |
| | | { |
| | | if (!HexToByte(s[start], s[start + 1], out r) || |
| | | !HexToByte(s[start + 2], s[start + 3], out g) || |
| | | !HexToByte(s[start + 4], s[start + 5], out b)) |
| | | return false; |
| | | if (len == 8 && !HexToByte(s[start + 6], s[start + 7], out a)) |
| | | return false; |
| | | } |
| | | if (hex[0] != '#') hex = "#" + hex; |
| | | return UnityEngine.ColorUtility.TryParseHtmlString(hex, out color); |
| | | else // len == 3 || len == 4,每位复制一次(与 Unity 行为一致) |
| | | { |
| | | if (!HexToByte(s[start], s[start], out r) || |
| | | !HexToByte(s[start + 1], s[start + 1], out g) || |
| | | !HexToByte(s[start + 2], s[start + 2], out b)) |
| | | return false; |
| | | if (len == 4 && !HexToByte(s[start + 3], s[start + 3], out a)) |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | private static bool HexToByte(char hi, char lo, out int value) |
| | | { |
| | | int h = HexVal(hi), l = HexVal(lo); |
| | | value = (h < 0 || l < 0) ? 0 : ((h << 4) | l); |
| | | return h >= 0 && l >= 0; |
| | | } |
| | | |
| | | private static int HexVal(char c) |
| | | { |
| | | if (c >= '0' && c <= '9') return c - '0'; |
| | | if (c >= 'a' && c <= 'f') return c - 'a' + 10; |
| | | if (c >= 'A' && c <= 'F') return c - 'A' + 10; |
| | | return -1; |
| | | } |
| | | |
| | | public bool IsFestivalActivityOpen() |