public static void Postfix(MechLabInventoryWidget __instance) { if (__instance.gameObject.activeInHierarchy) { __instance.StartCoroutine(EndOfFrameScrollBarMovement(__instance)); } }
// auto strip engine when put back to inventory internal static void InventoryWidgetOnAddItem(MechLabInventoryWidget widget, MechLabPanel panel, IMechLabDraggableItem item) { if (StripEngine(panel, item)) { widget.RefreshFilterToggles(); } }
public static void Postfix(MechLabInventoryWidget __instance, float ___mechTonnage, List <InventoryItemElement_NotListView> ___localInventory) { foreach (var item in ___localInventory) { MechComponentDef component = null; if (item.controller != null) { component = item.controller.componentDef; } else if (item.ComponentRef != null) { component = item.ComponentRef.Def; } if (component != null && component.IsStructure()) { var tonnage = component.GetStructureWeight(); // Control.mod.Logger.Log(string.Format("[{0}] found structure {1} {2}/{3}", Time.realtimeSinceStartup, // component.Description.Id, tonnage, ___mechTonnage)); item.gameObject.SetActive( (___mechTonnage < 0 || ___mechTonnage == tonnage) && item.gameObject.activeSelf ); } } }
public static void OnItemGrab_Pre(MechLabInventoryWidget __instance, ref IMechLabDraggableItem item) { if (state != null && state.inventoryWidget == __instance) { try { LogDebug(string.Format("OnItemGrab")); var nlv = item as InventoryItemElement_NotListView; var nlvtmp = state.instance.dataManager.PooledInstantiate(ListElementController_BASE_NotListView.INVENTORY_ELEMENT_PREFAB_NotListView , BattleTechResourceType.UIModulePrefabs, null, null, null) .GetComponent <InventoryItemElement_NotListView>(); var lec = nlv.controller; var iw = nlvtmp; var cref = state.GetRef(lec); iw.ClearEverything(); iw.ComponentRef = cref; lec.ItemWidget = iw; iw.SetData(lec, state.inventoryWidget, lec.quantity, false, null); lec.SetupLook(iw); iw.gameObject.SetActive(true); item = iw; } catch (Exception e) { LogException(e); } } }
public static void Prefix(MechLabInventoryWidget __instance, DataManager ___dataManager, IMechLabDraggableItem item) { try { var panel = __instance.ParentDropTarget as MechLabPanel; if (panel == null) { return; } if (panel.baseWorkOrder == null) { return; } if (!panel.IsSimGame) { return; } if (item == null) { return; } EnginePersistence.InventoryWidgetOnAddItem(__instance, panel, item); } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static List <InventoryItemElement_NotListView> PullItemsFromInventory(this MechLabPanel mechLabPanel, List <InventoryItemElement_Simple> requiredItems, List <InventoryItemElement_NotListView> requestedInventory) { MechLabInventoryWidget inventoryWidget = (MechLabInventoryWidget)AccessTools.Field(typeof(MechLabPanel), "inventoryWidget").GetValue(mechLabPanel); List <InventoryItemElement_NotListView> collectedItems = new List <InventoryItemElement_NotListView>(); // Reverse iterate to be able to directly remove without exception // BEWARE: Throws exception if the inventory gets completely emptied during this process (very unlikely but possible) for (int i = requestedInventory.Count - 1; i >= 0; i--) { foreach (InventoryItemElement_Simple requiredItem in requiredItems) { if (requestedInventory[i].ComponentRef.ComponentDefID == requiredItem.ComponentRef.ComponentDefID) { //if (requestedInventory[i].Quantity >= requiredItem.Quantity) if (requestedInventory[i].controller.quantity >= requiredItem.Quantity) { for (int j = 0; j < requiredItem.Quantity; j++) { // Collect before removal just makes sense... :-) collectedItems.Add(requestedInventory[i]); inventoryWidget.RemoveItem(requestedInventory[i]); } } } } } return(collectedItems); }
// auto strip engine when put back to inventory internal static void InventoryWidgetOnAddItem(MechLabInventoryWidget widget, MechLabPanel panel, IMechLabDraggableItem item) { if (item.ItemType != MechLabDraggableItemType.MechComponentItem) { return; } var componentRef = item.ComponentRef; var engineRef = componentRef.GetEngineRef(); if (engineRef == null) { return; } //Control.mod.Logger.LogDebug("MechLabInventoryWidget.OnAddItem " + componentRef.Def.Description.Id + " UID=" + componentRef.SimGameUID); foreach (var componentDefID in engineRef.GetInternalComponents()) { //Control.mod.Logger.LogDebug("MechLabInventoryWidget.OnAddItem extracting componentDefID=" + componentDefID); var @ref = CreateMechComponentRef(componentDefID, panel.sim, panel.dataManager); var mechLabItemSlotElement = panel.CreateMechComponentItem(@ref, false, ChassisLocations.None, null); widget.OnAddItem(mechLabItemSlotElement, false); } //engineRef.ClearInternalComponents(); //SaveEngineState(engineRef, panel); widget.RefreshFilterToggles(); }
private static IEnumerator EndOfFrameScrollBarMovement(MechLabInventoryWidget __instance) { yield return(new WaitForEndOfFrame()); Scrollbar(__instance).verticalNormalizedPosition = Mathf.Clamp(m_scrollPos, 0f, 1f); yield break; }
public static void Prefix(MechLabInventoryWidget __instance) { if (Traverse.Create(__instance).Field("currentSort").GetValue <Comparison <InventoryItemElement> >() != null) { m_scrollPos = Scrollbar(__instance).verticalNormalizedPosition; //Log("saving scroll (hover)"); } }
public static bool ResetFiltersPrefix(MechLabInventoryWidget __instance) { if (__instance != UIHandler.widget) { return(true); } //__instance.FilterAll(); return(false); }
// hide incompatible engines public static void Postfix(MechLabInventoryWidget __instance, float ___mechTonnage) { try { EngineMisc.RefreshAvailability(__instance, ___mechTonnage); } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static void PreInit(MechLabPanel __instance, MechLabInventoryWidget ___inventoryWidget) { Control.LogDebug("MechLab.InitWidgets - Prefix"); UIHandler.PreInit(__instance, ___inventoryWidget); var loadRequest = __instance.dataManager.CreateLoadRequest(); foreach (var str in Control.Settings.Tabs.SelectMany(i => i.Buttons).Where(i => !string.IsNullOrEmpty(i.Icon)).Select(i => i.Icon)) { loadRequest.AddLoadRequest <SVGAsset>(BattleTechResourceType.SVGAsset, str, null); } loadRequest.ProcessRequests(); }
public static void Prefix(MechLabInventoryWidget __instance) { var willBeFilteringJumpJet = !Traverse.Create(__instance).Field("filterEnabledJumpjet").GetValue <bool>(); if (willBeFilteringJumpJet) { Traverse.Create(__instance).Field("filterEnabledHeatsink").SetValue(false); Traverse.Create(__instance).Field("EquipmentHeatsinkToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); Traverse.Create(__instance).Field("filterEnabledUpgrade").SetValue(false); Traverse.Create(__instance).Field("EquipmentUpgradeToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); } }
public static bool ApplyFiltering_Pre(MechLabInventoryWidget __instance, bool refreshPositioning) { if (state != null && state.inventoryWidget == __instance && !PatchMechlabLimitItems.filterGuard) { LogDebug(string.Format("OnApplyFiltering (refresh-pos? {0})", refreshPositioning)); state.FilterChanged(refreshPositioning); return(false); } else { return(true); } }
public static bool OnAddItem_Pre(MechLabInventoryWidget __instance, IMechLabDraggableItem item) { if (state != null && state.inventoryWidget == __instance) { try { var nlv = item as InventoryItemElement_NotListView; var quantity = nlv == null ? 1 : nlv.controller.quantity; var existing = state.FetchItem(item.ComponentRef); if (existing == null) { LogDebug(string.Format("OnAddItem new {0}", quantity)); var controller = nlv == null ? null : nlv.controller; if (controller == null) { if (item.ComponentRef.ComponentDefType == ComponentType.Weapon) { var ncontroller = new ListElementController_InventoryWeapon_NotListView(); ncontroller.InitAndCreate(item.ComponentRef, state.instance.dataManager, state.inventoryWidget, quantity, false); controller = ncontroller; } else { var ncontroller = new ListElementController_InventoryGear_NotListView(); ncontroller.InitAndCreate(item.ComponentRef, state.instance.dataManager, state.inventoryWidget, quantity, false); controller = ncontroller; } } state.rawInventory.Add(controller); state.rawInventory = state.Sort(state.rawInventory); state.FilterChanged(false); } else { LogDebug(string.Format("OnAddItem existing {0}", quantity)); if (existing.quantity != Int32.MinValue) { existing.ModifyQuantity(quantity); } state.Refresh(false); } } catch (Exception e) { LogException(e); } return(false); } else { return(true); } }
public static void Postfix(MechLabInventoryWidget __instance) { // when a filter is applied, permit the default behaviour (scroll to top) unless we're in the mech bay if (m_scrollAfterFilter) { m_scrollAfterFilter = false; if (__instance.gameObject.activeInHierarchy) { __instance.StartCoroutine(EndOfFrameScrollBarMovement(__instance)); } } //Log($"resetting selection index"); m_selectedIdx = -1; // reset selection on filter as it will scroll to the top }
public static bool ApplyFiltering(MechLabInventoryWidget __instance, bool refreshPositioning, List <InventoryItemElement_NotListView> ___localInventory) { if (__instance != UIHandler.widget || Control.Settings.BTPerfFix) { return(true); } foreach (var item in ___localInventory) { item.gameObject.SetActive(UIHandler.ApplyFilter(item.ComponentRef.Def)); } return(false); }
// hide incompatible engines public static void Postfix(MechLabInventoryWidget __instance, float ___mechTonnage) { try { if (!Control.settings.EnableAvailabilityChecks) { return; } EngineMisc.RefreshAvailability(__instance, ___mechTonnage); } catch (Exception e) { Control.mod.Logger.LogError(e); } }
public static bool ApplySorting_Pre(MechLabInventoryWidget __instance) { if (state != null && state.inventoryWidget == __instance) { // it's a mechlab screen, we do our own sort. var _cs = new Traverse(__instance).Field("currentSort").GetValue <Comparison <InventoryItemElement_NotListView> >(); var cst = _cs.Method; LogDebug(string.Format("OnApplySorting using {0}::{1}", cst.DeclaringType.FullName, cst.ToString())); state.FilterChanged(false); return(false); } else { return(true); } }
public static bool ApplySorting_Pre(MechLabInventoryWidget __instance) { if (state != null && state.inventoryWidget == __instance) { // it's a mechlab screen, we do our own sort. var _cs = __instance.currentSort; var cst = _cs.Method; LogDebug(string.Format("OnApplySorting using {0}::{1}", cst.DeclaringType.FullName, cst.ToString())); state.FilterChanged(false); return(false); } else { return(true); } }
public static void Prefix(MechLabInventoryWidget __instance) { var willBeFilteringEnergy = !Traverse.Create(__instance).Field("filterEnabledWeaponEnergy").GetValue <bool>(); if (willBeFilteringEnergy) { Traverse.Create(__instance).Field("filterEnabledWeaponBallistic").SetValue(false); Traverse.Create(__instance).Field("WeaponBallisticToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); Traverse.Create(__instance).Field("filterEnabledWeaponMissile").SetValue(false); Traverse.Create(__instance).Field("WeaponMissileToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); Traverse.Create(__instance).Field("filterEnabledWeaponSmall").SetValue(false); Traverse.Create(__instance).Field("WeaponSmallToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); } }
public static void Init(MechLabPanel mechLabPanel, MechLabInventoryWidget mechLabInventoryWidget) { inv_helper.filterBtnAll.Value.SetActive(false); inv_helper.filterBtnEquipmentHeatsink.Value.SetActive(false); inv_helper.filterBtnEquipmentJumpjet.Value.SetActive(false); inv_helper.filterBtnEquipmentUpgrade.Value.SetActive(false); inv_helper.filterBtnWeaponEnergy.Value.SetActive(false); inv_helper.filterBtnWeaponMissile.Value.SetActive(false); inv_helper.filterBtnWeaponBallistic.Value.SetActive(false); inv_helper.filterBtnWeaponSmall.Value.SetActive(false); tab_radioset.defaultButton = tabs.FirstOrDefault(); tab_radioset.Reset(); TabPressed(Control.Settings.Tabs.FirstOrDefault()); }
private static bool Prefix(MechLabInventoryWidget __instance) { Comparison <InventoryItemElement_NotListView> currComp = Traverse.Create(__instance).Field("currentSort").GetValue <Comparison <InventoryItemElement_NotListView> >(); bool currDir = Traverse.Create(__instance).Field("invertSort").GetValue <bool>(); try { Traverse.Create(__instance).Field("currentSort").SetValue(new Comparison <InventoryItemElement_NotListView>(Compare_NotListView)); Traverse.Create(__instance).Field("invertSort").SetValue(true); return(true); } catch (Exception e) { BetterSorting.Log($"Failed to sort MechLabInventoryWidget, resetting to default.{Environment.NewLine}Details:{e.ToString()}"); Traverse.Create(__instance).Field("currentSort").SetValue(currComp); Traverse.Create(__instance).Field("invertSort").SetValue(currDir); return(true); } }
public static void Postfix(MechLabInventoryWidget __instance) { // start with ballistic selected Traverse.Create(__instance).Field("filterEnabledWeaponEnergy").SetValue(false); Traverse.Create(__instance).Field("WeaponEnergyToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); Traverse.Create(__instance).Field("filterEnabledWeaponMissile").SetValue(false); Traverse.Create(__instance).Field("WeaponMissileToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); Traverse.Create(__instance).Field("filterEnabledWeaponSmall").SetValue(false); Traverse.Create(__instance).Field("WeaponSmallToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); // start with upgrade selected Traverse.Create(__instance).Field("filterEnabledHeatsink").SetValue(false); Traverse.Create(__instance).Field("EquipmentHeatsinkToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); Traverse.Create(__instance).Field("filterEnabledJumpjet").SetValue(false); Traverse.Create(__instance).Field("EquipmentJumpjetToggleObj").GetValue <HBSDOTweenToggle>().SetState(ButtonState.Enabled); }
public InventoryHelper(MechLabInventoryWidget widget) { Widget = widget; main = new Traverse(widget); tabAllToggleObj = main.Field <HBSDOTweenToggle>("tabAllToggleObj"); tabWeaponsToggleObj = main.Field <HBSDOTweenToggle>("tabWeaponsToggleObj"); tabEquipmentToggleObj = main.Field <HBSDOTweenToggle>("tabEquipmentToggleObj"); tabMechPartToggleObj = main.Field <HBSDOTweenToggle>("tabMechPartToggleObj"); filterRadioSet = main.Field <HBSRadioSet>("filterRadioSet"); filterBtnAll = main.Field <GameObject>("filterBtnAll"); filterBtnWeaponBallistic = main.Field <GameObject>("filterBtnWeaponBallistic"); filterBtnWeaponEnergy = main.Field <GameObject>("filterBtnWeaponEnergy"); filterBtnWeaponMissile = main.Field <GameObject>("filterBtnWeaponMissile"); filterBtnWeaponSmall = main.Field <GameObject>("filterBtnWeaponSmall"); filterBtnEquipmentJumpjet = main.Field <GameObject>("filterBtnEquipmentJumpjet"); filterBtnEquipmentHeatsink = main.Field <GameObject>("filterBtnEquipmentHeatsink"); filterBtnEquipmentUpgrade = main.Field <GameObject>("filterBtnEquipmentUpgrade"); }
public static void PreInit(MechLabPanel mechLabPanel, MechLabInventoryWidget mechLabInventoryWidget) { if (tabs == null) { Control.LogDebug("No tabs found - create new"); tabs = new List <HBSDOTweenToggle>(); buttons = new List <button_info>(); InitTabs(mechLabPanel, mechLabInventoryWidget); } else if (mechlab != mechLabPanel) { Control.LogDebug("other mechlab widget, droping"); foreach (var toggle in tabs) { if (toggle != null) { toggle.gameObject.Destroy(); } } tabs.Clear(); foreach (var b in buttons) { if (b.go != null) { b.go.Destroy(); } } buttons.Clear(); InitTabs(mechLabPanel, mechLabInventoryWidget); } else { Control.LogDebug("already modified"); widget = mechLabInventoryWidget; } }
internal static void RefreshAvailability(MechLabInventoryWidget widget, float tonnage) { if (tonnage <= 0) { return; } foreach (var element in widget.localInventory) { MechComponentDef componentDef; if (element.controller != null) { componentDef = element.controller.componentDef; } else if (element.ComponentRef != null) { componentDef = element.ComponentRef.Def; } else { continue; } var engine = componentDef.GetComponent <EngineCoreDef>(); if (engine == null) { continue; } var movement = engine.GetMovement(tonnage); if (movement.Mountable) { continue; } element.gameObject.SetActive(false); } }
internal static void Postfix(MechLabInventoryWidget __instance, float ___mechTonnage, List <InventoryItemElement_NotListView> ___localInventory) { foreach (var item in ___localInventory) { //if item already hidden - skip if (!item.GameObject.activeSelf) { continue; } var mechlab = __instance.ParentDropTarget as MechLabPanel; foreach (var filter in item.ComponentRef.GetComponents <IMechLabFilter>()) { if (!filter.CheckFilter(mechlab)) { item.gameObject.SetActive(false); break; } } } }
internal static void RefreshAvailability(MechLabInventoryWidget widget, float tonnage) { if (tonnage <= 0) { return; } foreach (var element in widget.localInventory) { MechComponentDef componentDef; if (element.controller != null) { componentDef = element.controller.componentDef; } else if (element.ComponentRef != null) { componentDef = element.ComponentRef.Def; } else { continue; } var engine = componentDef.GetEngineDef(); if (engine == null) { continue; } if (Control.calc.CalcAvailability(engine, tonnage)) { continue; } element.gameObject.SetActive(false); } }
public static void RemoveItem(this MechLabInventoryWidget inventoryWidget, InventoryItemElement_NotListView item) { if (item.controller != null) { //Logger.Debug("[Extensions.MechLabInventoryWidget.RemoveItem] item.controller != null"); if (item.controller.quantity > 1) { item.controller.ModifyQuantity(-1); //Logger.Debug("[Extensions.MechLabInventoryWidget.RemoveItem] item.controller.quantity: " + item.controller.quantity); } else { //Logger.Debug("[Extensions.MechLabInventoryWidget.RemoveItem] item.controller.quantity <= 1: " + item.controller.quantity); inventoryWidget.localInventory.Remove(item); item.SetRadioParent(null); item.controller.Pool(); ReflectionHelper.InvokePrivateMethode(inventoryWidget, "EndOfFrameScrollBarMovement", null); } } else if (item.Quantity > 1) { item.ModifyQuantity(-1); } else { inventoryWidget.localInventory.Remove(item); item.SetRadioParent(null); ReflectionHelper.InvokePrivateMethode(inventoryWidget, "EndOfFrameScrollBarMovement", null); } if (!inventoryWidget.localInventory.Contains(item)) { //Logger.Debug("[Extensions.MechLabInventoryWidget.RemoveItem] !inventoryWidget.localInventory.Contains(item): HIDING item"); item.ElementVisible = false; } inventoryWidget.ApplySorting(true); }