using System; using HarmonyLib; using System.Reflection; using UnityEngine; namespace CLre.Fixes { [Bugfix(name = "ScrollSpeedImprovement", description = "Improve mouse wheel scroll speed in inventory", more = "https://trello.com/c/elL8IVdn/4-scroll-menus-are-insensitive", component = BugfixType.HarmonyPatch, id = 5)] [HarmonyPatch] class InventoryPanelScrollEngine_ScrollPanelByMouseWheel_Patch { [HarmonyPrefix] public static bool BeforeMethodCall(ref object panelScrollComponent, ref float scrollValue) { if (panelScrollComponent == null) return true; // If it's null, we don't try to handle it. // We, perhaps dangerously, assume that we'll only get a panelScrollComponent. PropertyInfo scrollbar = panelScrollComponent.GetType().GetProperty("scrollbar", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); UnityEngine.UI.Scrollbar sb = scrollbar.GetValue(panelScrollComponent) as UnityEngine.UI.Scrollbar; float num = -scrollValue * (sb.size * 0.3f); float num2 = sb.value; num2 = Mathf.Clamp01(num2 + num); sb.value = num2; return false; // Tell harmony not to invoke the original method } [HarmonyTargetMethod] public static MethodBase Target() { MethodInfo methodtopatch = AccessTools.Method("Game.UI.InventoryPanelScrollEngine:ScrollPanelByMouseWheel"); if (null == methodtopatch) API.Utility.Logging.MetaLog("Intercepting Game.UI.InventoryPanelScrollEngine:ScrollPanelByMouseWheel() failed"); return methodtopatch; } } }