Dont show left/right buttons on containers 2 cells wide or smaller

This commit is contained in:
Tyfon
2024-06-04 15:19:39 -07:00
parent 302cfe9af1
commit 1ab4263def
2 changed files with 7 additions and 3 deletions

View File

@@ -18,7 +18,8 @@ namespace UIFixes
[PatchPostfix]
public static void Postfix(GridWindow __instance)
{
if (Settings.AddContainerButtons.Value)
var wrappedInstance = __instance.R();
if (Settings.AddContainerButtons.Value && wrappedInstance.LootItem.Int32_0 > 2) // Greater than 2 cells wide
{
Transform closeButton = __instance.transform.Find("Caption Panel/Close Button");
Image sortBackground = __instance.transform.Find("Caption Panel/Sort Button")?.GetComponent<Image>();
@@ -26,13 +27,13 @@ namespace UIFixes
// Left button
Button leftButton = CreateButton(closeButton, sortBackground.sprite, EItemAttributeId.RecoilBack);
leftButton.onClick.AddListener(() => SnapLeft(__instance));
__instance.R().UI.AddDisposable(() => leftButton.onClick.RemoveAllListeners());
wrappedInstance.UI.AddDisposable(() => leftButton.onClick.RemoveAllListeners());
// Right button
Button rightButton = CreateButton(closeButton, sortBackground.sprite, EItemAttributeId.RecoilBack);
rightButton.transform.Find("X").Rotate(0f, 180f, 0f);
rightButton.onClick.AddListener(() => SnapRight(__instance));
__instance.R().UI.AddDisposable(() => rightButton.onClick.RemoveAllListeners());
wrappedInstance.UI.AddDisposable(() => rightButton.onClick.RemoveAllListeners());
// Put close back on the end
closeButton.SetAsLastSibling();

3
R.cs
View File

@@ -561,14 +561,17 @@ namespace UIFixes
{
public static Type Type { get; private set; }
private static FieldInfo GridSortPanelField;
private static FieldInfo LootItemField;
public static void InitTypes()
{
Type = typeof(EFT.UI.GridWindow);
GridSortPanelField = AccessTools.Field(Type, "_sortPanel");
LootItemField = AccessTools.GetDeclaredFields(Type).Single(f => f.FieldType == typeof(LootItemClass));
}
public EFT.UI.DragAndDrop.GridSortPanel GridSortPanel { get { return (EFT.UI.DragAndDrop.GridSortPanel)GridSortPanelField.GetValue(Value); } }
public LootItemClass LootItem { get { return (LootItemClass)LootItemField.GetValue(Value); } }
}
public class GridSortPanel(object value) : Wrapper(value)