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);
            }
Example #5
0
        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));
 }