More accurate check if enum value has flag

This commit is contained in:
Sinai 2022-03-15 01:51:27 +11:00
parent 1292affe6d
commit 3b71b40843

View File

@ -29,8 +29,11 @@ namespace UnityExplorer.CacheObject.IValues
private EnumCompleter enumCompleter; private EnumCompleter enumCompleter;
private GameObject toggleHolder; private GameObject toggleHolder;
private readonly List<Toggle> flagToggles = new List<Toggle>(); private readonly List<Toggle> flagToggles = new();
private readonly List<Text> flagTexts = new List<Text>(); private readonly List<Text> flagTexts = new();
public CachedEnumValue ValueAtIndex(int idx) => (CachedEnumValue)CurrentValues[idx];
public CachedEnumValue ValueAtKey(object key) => (CachedEnumValue)CurrentValues[key];
// Setting value from owner // Setting value from owner
public override void SetValue(object value) public override void SetValue(object value)
@ -70,13 +73,8 @@ namespace UnityExplorer.CacheObject.IValues
{ {
try try
{ {
var split = value.ToString().Split(',');
var set = new HashSet<string>();
foreach (var s in split)
set.Add(s.Trim());
for (int i = 0; i < CurrentValues.Count; i++) 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) catch (Exception ex)
{ {
@ -116,7 +114,7 @@ namespace UnityExplorer.CacheObject.IValues
for (int i = 0; i < CurrentValues.Count; i++) for (int i = 0; i < CurrentValues.Count; i++)
{ {
if (flagToggles[i].isOn) if (flagToggles[i].isOn)
values.Add(ValueAtIdx(i).Name); values.Add(ValueAtIndex(i).Name);
} }
CurrentOwner.SetUserValue(Enum.Parse(EnumType, string.Join(", ", values.ToArray()))); CurrentOwner.SetUserValue(Enum.Parse(EnumType, string.Join(", ", values.ToArray())));
@ -166,9 +164,6 @@ namespace UnityExplorer.CacheObject.IValues
return UIRoot; return UIRoot;
} }
public CachedEnumValue ValueAtIdx(int idx) => (CachedEnumValue)CurrentValues[idx];
public CachedEnumValue ValueAtKey(object key) => (CachedEnumValue)CurrentValues[key];
private void SetupTogglesForEnumType() private void SetupTogglesForEnumType()
{ {
toggleHolder.SetActive(true); toggleHolder.SetActive(true);
@ -191,7 +186,7 @@ namespace UnityExplorer.CacheObject.IValues
AddToggleRow(); AddToggleRow();
flagToggles[i].isOn = false; flagToggles[i].isOn = false;
flagTexts[i].text = ValueAtIdx(i).Name; flagTexts[i].text = ValueAtIndex(i).Name;
} }
} }