public void SetDropdownState(string val) { if (_ignoreNextChange) { _ignoreNextChange = false; return; } switch (EnumOptions) { case EnumSelection.AttachmentDevice: Overlay.AnchorDevice = (HOTK_Overlay.AttachmentDevice)Enum.Parse(typeof(HOTK_Overlay.AttachmentDevice), Dropdown.options[Dropdown.value].text); DesktopPortalController.Instance.CheckOverlayOffsetPerformed(); break; case EnumSelection.AttachmentPoint: Overlay.AnchorPoint = (HOTK_Overlay.AttachmentPoint)Enum.Parse(typeof(HOTK_Overlay.AttachmentPoint), Dropdown.options[Dropdown.value].text); break; case EnumSelection.AnimationType: Overlay.AnimateOnGaze = (HOTK_Overlay.AnimationType)Enum.Parse(typeof(HOTK_Overlay.AnimationType), Dropdown.options[Dropdown.value].text); break; case EnumSelection.Framerate: var fpsIndex = FramerateModeNames.IndexOf(Dropdown.options[Dropdown.value].text); Overlay.Framerate = fpsIndex == -1 ? HOTK_Overlay.FramerateMode._24FPS : (HOTK_Overlay.FramerateMode)fpsIndex; DesktopPortalController.Instance.SelectedWindowSettings.framerateMode = Overlay.Framerate; break; case EnumSelection.CaptureMode: var index = CaptureModeNames.IndexOf(Dropdown.options[Dropdown.value].text); DesktopPortalController.Instance.SelectedWindowSettings.captureMode = index == -1 ? DesktopPortalController.CaptureMode.GdiDirect : (DesktopPortalController.CaptureMode)index; // Fallback to GDI Direct if they were using a now disabled capture method break; case EnumSelection.BacksideTexture: DesktopPortalController.Instance.CurrentBacksideTexture = (DesktopPortalController.BacksideTexture)Dropdown.value; break; case EnumSelection.ClickAPI: DesktopPortalController.Instance.SetClickAPI((DesktopPortalController.ClickAPI)Dropdown.value); break; case EnumSelection.FilterMode: DesktopPortalController.Instance.DoChangeFilterMode((FilterMode)Dropdown.value); break; default: throw new ArgumentOutOfRangeException(); } }
private bool _ignoreNextChange; // Skip the next SetDropdownState call (used for loading so the change doesn't get called multiple times) public void OnEnable() { if (Dropdown == null) { return; } Dropdown.ClearOptions(); var strings = new List <string>(); // Builds a list of strings for this dropdown switch (EnumOptions) { case EnumSelection.AttachmentDevice: UpdateDeviceDropdown(); HOTK_TrackedDeviceManager.OnControllerIndicesUpdated += UpdateDeviceDropdown; break; case EnumSelection.AttachmentPoint: strings.AddRange(from object e in Enum.GetValues(typeof(HOTK_Overlay.AttachmentPoint)) select e.ToString()); Dropdown.AddOptions(strings); Dropdown.value = strings.IndexOf(Overlay.AnchorPoint.ToString()); break; case EnumSelection.AnimationType: strings.AddRange(from object e in Enum.GetValues(typeof(HOTK_Overlay.AnimationType)) select e.ToString()); Dropdown.AddOptions(strings); Dropdown.value = strings.IndexOf(Overlay.AnimateOnGaze.ToString()); break; case EnumSelection.CaptureMode: strings.AddRange(CaptureModeNames.Where((t, i) => CaptureModesEnabled[i])); Dropdown.AddOptions(strings); _ignoreNextChange = true; if (DesktopPortalController.Instance.SelectedWindowSettings != null) { Dropdown.value = strings.IndexOf(CaptureModeNames[(int)DesktopPortalController.Instance.SelectedWindowSettings.captureMode]); } break; case EnumSelection.Framerate: strings.AddRange(FramerateModeNames); Dropdown.AddOptions(strings); if (DesktopPortalController.Instance.SelectedWindowSettings != null) { Dropdown.value = strings.IndexOf(FramerateModeNames[(int)DesktopPortalController.Instance.SelectedWindowSettings.framerateMode]); } break; case EnumSelection.BacksideTexture: strings.AddRange(from object e in Enum.GetValues(typeof(DesktopPortalController.BacksideTexture)) select e.ToString()); Dropdown.AddOptions(strings); Dropdown.value = strings.IndexOf(DesktopPortalController.Instance.CurrentBacksideTexture.ToString()); break; case EnumSelection.ClickAPI: strings.AddRange(from object e in Enum.GetValues(typeof(DesktopPortalController.ClickAPI)) select e.ToString()); Dropdown.AddOptions(strings); if (DesktopPortalController.Instance.enabled && DesktopPortalController.Instance.SelectedWindowSettings != null) { Dropdown.value = strings.IndexOf(DesktopPortalController.Instance.SelectedWindowSettings.clickAPI.ToString()); Dropdown.interactable = true; } break; case EnumSelection.FilterMode: strings.AddRange(from object e in Enum.GetValues(typeof(FilterMode)) select e.ToString()); Dropdown.AddOptions(strings); if (DesktopPortalController.Instance.enabled && DesktopPortalController.Instance.SelectedWindowSettings != null) { Dropdown.value = strings.IndexOf(DesktopPortalController.Instance.SelectedWindowSettings.filterMode.ToString()); Dropdown.interactable = true; } break; default: throw new ArgumentOutOfRangeException(); } Dropdown.onValueChanged.Invoke(Dropdown.value); }