private static void DrawColor(SettingEntryBase obj) { var setting = (Color)obj.Get(); if (!_colorCache.TryGetValue(obj, out var cacheEntry)) { cacheEntry = new ColorCacheEntry { Tex = new Texture2D(40, 10, TextureFormat.ARGB32, false), Last = setting }; cacheEntry.Tex.FillTexture(setting); _colorCache[obj] = cacheEntry; } GUILayout.Label("R", BepInExPlugin.labelStyle, GUILayout.ExpandWidth(false)); setting.r = GUILayout.HorizontalSlider(setting.r, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Label("G", BepInExPlugin.labelStyle, GUILayout.ExpandWidth(false)); setting.g = GUILayout.HorizontalSlider(setting.g, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Label("B", BepInExPlugin.labelStyle, GUILayout.ExpandWidth(false)); setting.b = GUILayout.HorizontalSlider(setting.b, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Label("A", BepInExPlugin.labelStyle, GUILayout.ExpandWidth(false)); setting.a = GUILayout.HorizontalSlider(setting.a, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Space(4); if (setting != cacheEntry.Last) { obj.Set(setting); cacheEntry.Tex.FillTexture(setting); cacheEntry.Last = setting; } GUILayout.Label(cacheEntry.Tex, BepInExPlugin.labelStyle, GUILayout.ExpandWidth(false)); }
private static void DrawColor(ICacheEntry obj, object value) { var setting = (Color)value; if (!_colorCache.TryGetValue(obj, out var cacheEntry)) { cacheEntry = new ColorCacheEntry { Tex = new Texture2D(14, 14, TextureFormat.ARGB32, false), Last = setting }; cacheEntry.Tex.FillTexture(setting); _colorCache[obj] = cacheEntry; } GUILayout.Label("R", GUILayout.ExpandWidth(false)); setting.r = GUILayout.HorizontalSlider(setting.r, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Label("G", GUILayout.ExpandWidth(false)); setting.g = GUILayout.HorizontalSlider(setting.g, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Label("B", GUILayout.ExpandWidth(false)); setting.b = GUILayout.HorizontalSlider(setting.b, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Label("A", GUILayout.ExpandWidth(false)); setting.a = GUILayout.HorizontalSlider(setting.a, 0f, 1f, GUILayout.ExpandWidth(true)); GUILayout.Space(4); GUI.changed = false; var isBeingEdited = _currentlyEditingTag == obj; var text = isBeingEdited ? _currentlyEditingText : TomlTypeConverter.ConvertToString(setting, typeof(Color)); text = GUILayout.TextField(text, GUILayout.Width(75)); if (GUI.changed && !text.Equals(TomlTypeConverter.ConvertToString(setting, typeof(Color))) || isBeingEdited) { if (_userHasHitReturn) { _currentlyEditingTag = null; _userHasHitReturn = false; try { obj.SetValue(TomlTypeConverter.ConvertToValue <Color>(text)); } catch { } } else { _currentlyEditingText = text; _currentlyEditingTag = obj; } } if (setting != cacheEntry.Last) { obj.SetValue(setting); cacheEntry.Tex.FillTexture(setting); cacheEntry.Last = setting; } GUILayout.Label(cacheEntry.Tex, GUILayout.ExpandWidth(false)); }
private static void HsvDrawer(ConfigEntryBase entry) { var vec = (Vector3)entry.BoxedValue; if (!_colorCache.TryGetValue(entry, out var cacheEntry)) { cacheEntry = new ColorCacheEntry { Tex = new Texture2D(40, 60, TextureFormat.ARGB32, false), Last = vec }; cacheEntry.Tex.FillTexture(Color.HSVToRGB(vec.x, vec.y, vec.z)); _colorCache[entry] = cacheEntry; } GUILayout.BeginVertical(GUILayout.ExpandWidth(true)); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("H", GUILayout.ExpandWidth(false)); vec.x = Mathf.Round(100.0f * GUILayout.HorizontalSlider(vec.x, 0f, 1f, GUILayout.ExpandWidth(true))) / 100.0f; GUILayout.Label($"{vec.x:F2}", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("S", GUILayout.ExpandWidth(false)); vec.y = Mathf.Round(100.0f * GUILayout.HorizontalSlider(vec.y, 0f, 1f, GUILayout.ExpandWidth(true))) / 100.0f; GUILayout.Label($"{vec.y:F2}", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("V", GUILayout.ExpandWidth(false)); vec.z = Mathf.Round(100.0f * GUILayout.HorizontalSlider(vec.z, 0f, 1f, GUILayout.ExpandWidth(true))) / 100.0f; GUILayout.Label($"{vec.z:F2}", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.EndVertical(); if (vec != cacheEntry.Last) { entry.BoxedValue = vec; cacheEntry.Tex.FillTexture(Color.HSVToRGB(vec.x, vec.y, vec.z)); cacheEntry.Last = vec; } GUILayout.Label(cacheEntry.Tex, GUILayout.ExpandWidth(false)); }