From 3b71b408436e5e6beada830c841fcb0b5e9d41b7 Mon Sep 17 00:00:00 2001 From: Sinai <49360850+sinai-dev@users.noreply.github.com> Date: Tue, 15 Mar 2022 01:51:27 +1100 Subject: [PATCH] More accurate check if enum value has flag --- src/CacheObject/IValues/InteractiveEnum.cs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/CacheObject/IValues/InteractiveEnum.cs b/src/CacheObject/IValues/InteractiveEnum.cs index 616c113..0eb6d31 100644 --- a/src/CacheObject/IValues/InteractiveEnum.cs +++ b/src/CacheObject/IValues/InteractiveEnum.cs @@ -29,8 +29,11 @@ namespace UnityExplorer.CacheObject.IValues private EnumCompleter enumCompleter; private GameObject toggleHolder; - private readonly List flagToggles = new List(); - private readonly List flagTexts = new List(); + private readonly List flagToggles = new(); + private readonly List flagTexts = new(); + + public CachedEnumValue ValueAtIndex(int idx) => (CachedEnumValue)CurrentValues[idx]; + public CachedEnumValue ValueAtKey(object key) => (CachedEnumValue)CurrentValues[key]; // Setting value from owner public override void SetValue(object value) @@ -70,13 +73,8 @@ namespace UnityExplorer.CacheObject.IValues { try { - var split = value.ToString().Split(','); - var set = new HashSet(); - foreach (var s in split) - set.Add(s.Trim()); - for (int i = 0; i < CurrentValues.Count; i++) - flagToggles[i].isOn = set.Contains(ValueAtIdx(i).Name); + flagToggles[i].isOn = (value as Enum).HasFlag(ValueAtIndex(i).ActualValue as Enum); } catch (Exception ex) { @@ -116,7 +114,7 @@ namespace UnityExplorer.CacheObject.IValues for (int i = 0; i < CurrentValues.Count; i++) { if (flagToggles[i].isOn) - values.Add(ValueAtIdx(i).Name); + values.Add(ValueAtIndex(i).Name); } CurrentOwner.SetUserValue(Enum.Parse(EnumType, string.Join(", ", values.ToArray()))); @@ -166,9 +164,6 @@ namespace UnityExplorer.CacheObject.IValues return UIRoot; } - public CachedEnumValue ValueAtIdx(int idx) => (CachedEnumValue)CurrentValues[idx]; - public CachedEnumValue ValueAtKey(object key) => (CachedEnumValue)CurrentValues[key]; - private void SetupTogglesForEnumType() { toggleHolder.SetActive(true); @@ -191,7 +186,7 @@ namespace UnityExplorer.CacheObject.IValues AddToggleRow(); flagToggles[i].isOn = false; - flagTexts[i].text = ValueAtIdx(i).Name; + flagTexts[i].text = ValueAtIndex(i).Name; } }