unpack all; lateupdate taskserializer; create inner context as necessary

This commit is contained in:
Tyfon
2024-07-01 13:54:44 -07:00
parent 3258371a47
commit 214062b1f2
4 changed files with 46 additions and 5 deletions

View File

@@ -237,14 +237,30 @@ namespace UIFixes
private static bool InteractionAvailable(ItemContextClass itemContext, EItemInfoButton interaction, ItemUiContext itemUiContext)
{
// Since itemContext is for "drag", no context actions are allowed. Get the underlying "inventory" context
ItemContextAbstractClass innerContext = itemContext.GClass2813_0;
if (innerContext == null)
{
return false;
}
bool createdContext = false;
if (innerContext.Item != itemContext.Item)
{
// Actual context went away and we're looking at inventory/stash context
innerContext = innerContext.CreateChild(itemContext.Item);
createdContext = true;
}
var contextInteractions = itemUiContext.GetItemContextInteractions(innerContext, null);
return contextInteractions.IsInteractionAvailable(interaction);
bool result = contextInteractions.IsInteractionAvailable(interaction);
if (createdContext)
{
innerContext.Dispose();
}
return result;
}
public static void EquipAll(ItemUiContext itemUiContext, bool allOrNothing)
@@ -298,6 +314,19 @@ namespace UIFixes
UnloadSerializer = null;
}
public static void UnpackAll(ItemUiContext itemUiContext, bool allOrNothing)
{
if (!allOrNothing || InteractionCount(EItemInfoButton.Unpack, itemUiContext) == Count)
{
var taskSerializer = itemUiContext.gameObject.AddComponent<ItemContextTaskSerializer>();
taskSerializer.Initialize(
SortedItemContexts().Where(ic => InteractionAvailable(ic, EItemInfoButton.Unpack, itemUiContext)),
itemContext => itemUiContext.UnpackItem(itemContext.Item));
itemUiContext.Tooltip?.Close();
}
}
private static void ShowSelection(GridItemView itemView)
{
GameObject selectedMark = itemView.transform.Find("SelectedMark")?.gameObject;

View File

@@ -129,6 +129,15 @@ namespace UIFixes
____text.text += " (x" + count + ")";
}
}
else if (caption == EItemInfoButton.Unpack.ToString())
{
int count = MultiSelect.InteractionCount(EItemInfoButton.Unpack, ItemUiContext.Instance);
if (count > 0)
{
____text.text += " (x" + count + ")";
}
}
}
}

View File

@@ -314,6 +314,9 @@ namespace UIFixes
case EItemInfoButton.UnloadAmmo:
MultiSelect.UnloadAmmoAll(___itemUiContext_1, false);
return false;
case EItemInfoButton.Unpack:
MultiSelect.UnpackAll(___itemUiContext_1, false);
return false;
default:
return true;
}

View File

@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using UnityEngine;
@@ -21,7 +20,7 @@ namespace UIFixes
currentTask = Task.CompletedTask;
totalTask = new TaskCompletionSource();
Update();
LateUpdate();
return totalTask.Task;
}
@@ -29,9 +28,10 @@ namespace UIFixes
public void Cancel()
{
totalTask.TrySetCanceled();
Complete();
}
public void Update()
public void LateUpdate()
{
if (currentTask.IsCanceled)
{
@@ -56,7 +56,7 @@ namespace UIFixes
private void Complete()
{
totalTask.Complete();
totalTask.TryComplete();
func = null;
Destroy(this);
}