adjust multiselect clickable detection; make modify equipped weapons not advanced
This commit is contained in:
@@ -188,24 +188,40 @@ public class DrawMultiSelect : MonoBehaviour
|
|||||||
};
|
};
|
||||||
|
|
||||||
List<RaycastResult> results = [];
|
List<RaycastResult> results = [];
|
||||||
|
preloaderRaycaster.Raycast(eventData, results); // preload objects are on top, so check that first
|
||||||
localRaycaster.Raycast(eventData, results);
|
localRaycaster.Raycast(eventData, results);
|
||||||
preloaderRaycaster.Raycast(eventData, results);
|
|
||||||
|
|
||||||
foreach (GameObject gameObject in results.Select(r => r.gameObject))
|
GameObject gameObject = results.FirstOrDefault().gameObject;
|
||||||
|
if (gameObject == null)
|
||||||
{
|
{
|
||||||
var draggables = gameObject.GetComponents<MonoBehaviour>()
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var draggables = gameObject.GetComponentsInParent<MonoBehaviour>()
|
||||||
.Where(c => c is IDragHandler || c is IBeginDragHandler || c is TextMeshProUGUI) // tmp_inputfield is draggable, but textmesh isn't so explicitly include
|
.Where(c => c is IDragHandler || c is IBeginDragHandler || c is TextMeshProUGUI) // tmp_inputfield is draggable, but textmesh isn't so explicitly include
|
||||||
.Where(c => c is not ScrollRectNoDrag) // this disables scrolling, it doesn't add it
|
.Where(c => c is not ScrollRectNoDrag) // this disables scrolling, it doesn't add it
|
||||||
.Where(c => c.name != "Inner"); // there's a random DragTrigger sitting in ItemInfoWindows
|
.Where(c => c.name != "Inner"); // there's a random DragTrigger sitting in ItemInfoWindows
|
||||||
|
|
||||||
var clickables = gameObject.GetComponents<MonoBehaviour>()
|
var clickables = gameObject.GetComponentsInParent<MonoBehaviour>()
|
||||||
.Where(c => c is IPointerClickHandler || c is IPointerDownHandler || c is IPointerUpHandler);
|
.Where(c => c is IPointerClickHandler || c is IPointerDownHandler || c is IPointerUpHandler)
|
||||||
|
.Where(c => c is not EmptySlotMenuTrigger); // ignore empty slots that are right-clickable due to UIFixes
|
||||||
|
|
||||||
|
// Windows are clickable to focus them, but that shouldn't block selection
|
||||||
|
var windows = clickables
|
||||||
|
.Where(c => c is UIInputNode) // Windows<>'s parent, cheap check
|
||||||
|
.Where(c =>
|
||||||
|
{
|
||||||
|
// Most window types implement IPointerClickHandler and inherit directly from Window<>
|
||||||
|
Type baseType = c.GetType().BaseType;
|
||||||
|
return baseType != null && baseType.IsGenericType && baseType.GetGenericTypeDefinition() == typeof(Window<>);
|
||||||
|
});
|
||||||
|
|
||||||
|
clickables = clickables.Except(windows);
|
||||||
|
|
||||||
if (draggables.Any() || clickables.Any())
|
if (draggables.Any() || clickables.Any())
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ public static class SwapPatches
|
|||||||
{
|
{
|
||||||
protected override MethodBase GetTargetMethod()
|
protected override MethodBase GetTargetMethod()
|
||||||
{
|
{
|
||||||
return AccessTools.Method(typeof(ItemView), nameof(ItemView.OnDrag));
|
return AccessTools.Method(typeof(ItemView), nameof(ItemView.OnBeginDrag));
|
||||||
}
|
}
|
||||||
|
|
||||||
[PatchPrefix]
|
[PatchPrefix]
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ internal class Settings
|
|||||||
public static ConfigEntry<bool> AlwaysSwapMags { get; set; }
|
public static ConfigEntry<bool> AlwaysSwapMags { get; set; }
|
||||||
public static ConfigEntry<bool> UnloadAmmoBoxInPlace { get; set; } // Advanced
|
public static ConfigEntry<bool> UnloadAmmoBoxInPlace { get; set; } // Advanced
|
||||||
public static ConfigEntry<bool> SwapImpossibleContainers { get; set; }
|
public static ConfigEntry<bool> SwapImpossibleContainers { get; set; }
|
||||||
public static ConfigEntry<bool> ModifyEquippedWeapons { get; set; } // Advanced
|
public static ConfigEntry<bool> ModifyEquippedWeapons { get; set; }
|
||||||
public static ConfigEntry<ModRaidWeapon> ModifyRaidWeapons { get; set; }
|
public static ConfigEntry<ModRaidWeapon> ModifyRaidWeapons { get; set; }
|
||||||
public static ConfigEntry<bool> ReorderGrids { get; set; }
|
public static ConfigEntry<bool> ReorderGrids { get; set; }
|
||||||
public static ConfigEntry<bool> PrioritizeSmallerGrids { get; set; }
|
public static ConfigEntry<bool> PrioritizeSmallerGrids { get; set; }
|
||||||
@@ -609,7 +609,7 @@ internal class Settings
|
|||||||
new ConfigDescription(
|
new ConfigDescription(
|
||||||
"Enable the modification of equipped weapons, including vital parts, out of raid",
|
"Enable the modification of equipped weapons, including vital parts, out of raid",
|
||||||
null,
|
null,
|
||||||
new ConfigurationManagerAttributes { IsAdvanced = true })));
|
new ConfigurationManagerAttributes { })));
|
||||||
|
|
||||||
configEntries.Add(ModifyRaidWeapons = config.Bind(
|
configEntries.Add(ModifyRaidWeapons = config.Bind(
|
||||||
InventorySection,
|
InventorySection,
|
||||||
|
|||||||
Reference in New Issue
Block a user