Files
2026-03-04 10:03:45 +08:00

101 lines
2.2 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace RootMotion
{
public static class LayerMaskExtensions
{
public static bool Contains(LayerMask mask, int layer)
{
return (int)mask == ((int)mask | (1 << layer));
}
public static LayerMask Create(params string[] layerNames)
{
return NamesToMask(layerNames);
}
public static LayerMask Create(params int[] layerNumbers)
{
return LayerNumbersToMask(layerNumbers);
}
public static LayerMask NamesToMask(params string[] layerNames)
{
LayerMask layerMask = 0;
foreach (string layerName in layerNames)
{
layerMask = (int)layerMask | (1 << LayerMask.NameToLayer(layerName));
}
return layerMask;
}
public static LayerMask LayerNumbersToMask(params int[] layerNumbers)
{
LayerMask layerMask = 0;
foreach (int num in layerNumbers)
{
layerMask = (int)layerMask | (1 << num);
}
return layerMask;
}
public static LayerMask Inverse(this LayerMask original)
{
return ~(int)original;
}
public static LayerMask AddToMask(this LayerMask original, params string[] layerNames)
{
return (int)original | (int)NamesToMask(layerNames);
}
public static LayerMask RemoveFromMask(this LayerMask original, params string[] layerNames)
{
return ~((int)(LayerMask)(~(int)original) | (int)NamesToMask(layerNames));
}
public static string[] MaskToNames(this LayerMask original)
{
List<string> list = new List<string>();
for (int i = 0; i < 32; i++)
{
int num = 1 << i;
if (((int)original & num) == num)
{
string text = LayerMask.LayerToName(i);
if (!string.IsNullOrEmpty(text))
{
list.Add(text);
}
}
}
return list.ToArray();
}
public static int[] MaskToNumbers(this LayerMask original)
{
List<int> list = new List<int>();
for (int i = 0; i < 32; i++)
{
int num = 1 << i;
if (((int)original & num) == num)
{
list.Add(i);
}
}
return list.ToArray();
}
public static string MaskToString(this LayerMask original)
{
return original.MaskToString(", ");
}
public static string MaskToString(this LayerMask original, string delimiter)
{
return string.Join(delimiter, original.MaskToNames());
}
}
}