using TMPro; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; public class SettingsOption : MonoBehaviour { public SettingsOptionType optionType; public TextMeshProUGUI textElement; public Image toggleImage; public Sprite enabledImage; public Sprite disabledImage; private bool askedForConfirmation; [Header("Key rebinding")] public InputActionReference rebindableAction; public GameObject waitingForInput; public TextMeshProUGUI currentlyUsedKeyText; public void SetValueToMatchSettings() { switch (optionType) { case SettingsOptionType.ChangeBinding: { int bindingIndexForControl = rebindableAction.action.GetBindingIndexForControl(rebindableAction.action.controls[0]); Debug.Log(InputControlPath.ToHumanReadableString(rebindableAction.action.bindings[bindingIndexForControl].effectivePath, InputControlPath.HumanReadableStringOptions.OmitDevice)); currentlyUsedKeyText.text = InputControlPath.ToHumanReadableString(rebindableAction.action.bindings[bindingIndexForControl].effectivePath, InputControlPath.HumanReadableStringOptions.OmitDevice); break; } case SettingsOptionType.LookSens: base.gameObject.GetComponentInChildren().SetValueWithoutNotify(IngamePlayerSettings.Instance.settings.lookSensitivity); break; case SettingsOptionType.Gamma: base.gameObject.GetComponentInChildren().SetValueWithoutNotify(IngamePlayerSettings.Instance.settings.gammaSetting / 0.05f); break; case SettingsOptionType.MicEnabled: ToggleMicEnabledImage(); break; case SettingsOptionType.MasterVolume: base.gameObject.GetComponentInChildren().SetValueWithoutNotify(IngamePlayerSettings.Instance.settings.masterVolume * 100f); break; case SettingsOptionType.FramerateCap: base.gameObject.GetComponentInChildren().SetValueWithoutNotify(IngamePlayerSettings.Instance.settings.framerateCapIndex); break; case SettingsOptionType.FullscreenType: base.gameObject.GetComponentInChildren().SetValueWithoutNotify((int)IngamePlayerSettings.Instance.settings.fullScreenType); break; case SettingsOptionType.OnlineMode: case SettingsOptionType.MicPushToTalk: case SettingsOptionType.MicDevice: case SettingsOptionType.CancelOrConfirm: break; } } public void SetMasterVolume() { AudioListener.volume = IngamePlayerSettings.Instance.settings.masterVolume; } public void StartRebindKey() { IngamePlayerSettings.Instance.RebindKey(rebindableAction, this); } public void OnEnable() { if (optionType == SettingsOptionType.MicDevice) { IngamePlayerSettings.Instance.RefreshAndDisplayCurrentMicrophone(); } } public void OnDisable() { if (optionType == SettingsOptionType.ChangeBinding) { if (IngamePlayerSettings.Instance.rebindingOperation != null) { IngamePlayerSettings.Instance.CancelRebind(); } currentlyUsedKeyText.enabled = true; waitingForInput.SetActive(value: false); } } public void SetSettingsOptionInt(int value) { IngamePlayerSettings.Instance.SetOption(optionType, value); } public void SetSettingsOptionFloat(float value) { IngamePlayerSettings.Instance.SetOption(optionType, (int)value); } public void ToggleMicEnabledImage() { if (!(toggleImage == null)) { if (IngamePlayerSettings.Instance.unsavedSettings.micEnabled) { toggleImage.sprite = enabledImage; textElement.text = "ENABLED"; } else { toggleImage.sprite = disabledImage; textElement.text = "DISABLED"; } } } public void ConfirmSettings() { IngamePlayerSettings.Instance.SaveChangedSettings(); } public void ResetSettingsToDefault() { IngamePlayerSettings.Instance.ResetSettingsToDefault(); } public void CancelSettings() { IngamePlayerSettings.Instance.DiscardChangedSettings(); } }