private static void MoveSlider(ConsoleSlider slider, float movement) { if (movement < 0f) { slider.OnDecrease(); } else if (movement > 0f) { slider.OnIncrease(); } }
private static void Postfix(ref int index, Il2Cpp.List <GameObject> menuItems) { ConsoleSlider slider = menuItems[index]?.GetComponentInChildren <ConsoleSlider>(); if (slider == null || slider.m_Slider == null || slider.m_Slider.numberOfSteps > 1) { return; // Not a stepless slider } float oldMovementWithTimer = GetTimeredMenuInputHorizontal(); if (oldMovementWithTimer != 0f) { return; // Already called OnIncrease or OnDecrease, we don't need to do that again } MoveSlider(slider, GetRawMenuInputHorizontal()); }
private static bool PatchSteplessMovement(ConsoleSlider consoleSlider, float direction) { UISlider slider = consoleSlider.m_Slider; if (!slider.enabled || slider.numberOfSteps >= 2) { return(true); // Run original } float sliderMoveAmount = direction * MOVEMENT_SPEED * Mathf.Abs(GetRawMenuInputHorizontal()); slider.value = slider.mValue + sliderMoveAmount; if (EventDelegate.IsValid(consoleSlider.onChange)) { EventDelegate.Execute(consoleSlider.onChange); } return(false); // Don't run original }
private static void Postfix(Panel_CustomXPSetup __instance) { int selectedIndex = __instance.m_CustomXPSelectedButtonIndex; Il2Cpp.List <GameObject> menuItems = __instance.m_CustomXPMenuItemOrder; ConsoleSlider slider = menuItems[selectedIndex].GetComponentInChildren <ConsoleSlider>(); if (!slider || !slider.m_Slider) { return; // Not a slider } bool isStepless = (slider.m_Slider.numberOfSteps <= 1); float movement = isStepless ? GetRawMenuInputHorizontal() : GetTimeredMenuInputHorizontal(); MoveSlider(slider, movement); }
private void AddSliderSetting(ModSettingsBase modSettings, FieldInfo field, NameAttribute name, DescriptionAttribute description, SliderAttribute range) { // Create menu GameObject setting = CreateSetting(name, description, sliderPrefab, "Label_FOV"); ConsoleSlider slider = setting.GetComponent <ConsoleSlider>(); UILabel uiLabel = slider.m_SliderObject.GetComponentInChildren <UILabel>(); UISlider uiSlider = slider.m_SliderObject.GetComponentInChildren <UISlider>(); // Sanitize user values, especially if the field type is int bool isFloat = IsFloatType(field.FieldType); float from = isFloat ? range.From : Mathf.Round(range.From); float to = isFloat ? range.To : Mathf.Round(range.To); int numberOfSteps = range.NumberOfSteps; if (numberOfSteps < 0) { numberOfSteps = isFloat ? 1 : Mathf.RoundToInt(Mathf.Abs(from - to)) + 1; } string numberFormat = range.NumberFormat; if (string.IsNullOrEmpty(numberFormat)) { numberFormat = isFloat ? SliderAttribute.DefaultFloatFormat : SliderAttribute.DefaultIntFormat; } // Add listeners to update setting value EventDelegate.Callback callback = new Action(() => UpdateSliderValue(modSettings, field, uiSlider, uiLabel, from, to, numberFormat)); EventDelegate.Set(slider.onChange, callback); EventDelegate.Set(uiSlider.onChange, callback); modSettings.AddRefreshAction(() => UpdateSlider(modSettings, field, uiSlider, uiLabel, from, to, numberFormat)); // Set default value and number of steps float defaultValue = Convert.ToSingle(field.GetValue(modSettings)); uiSlider.value = (defaultValue - from) / (to - from); uiSlider.numberOfSteps = numberOfSteps; UpdateSliderLabel(field, uiLabel, defaultValue, numberFormat); // Control visibility SetVisibilityListener(modSettings, field, setting, lastHeader); }
private static bool Prefix(ConsoleSlider __instance) { return(PatchSteplessMovement(__instance, -1f)); }