initial upload
This commit is contained in:
@ -0,0 +1,142 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RootMotion {
|
||||
|
||||
/// <summary>
|
||||
/// This class contains tools for working with LayerMasks.
|
||||
/// Most of this was copied from Unity Wiki: http://wiki.unity3d.com/index.php?title=LayerMaskExtensions.
|
||||
/// </summary>
|
||||
public static class LayerMaskExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Does the LayerMask contain a specific layer index?
|
||||
/// </summary>
|
||||
public static bool Contains(LayerMask mask, int layer) {
|
||||
return mask == (mask | (1 << layer));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a LayerMask from an array of layer names.
|
||||
/// </summary>
|
||||
public static LayerMask Create(params string[] layerNames)
|
||||
{
|
||||
return NamesToMask(layerNames);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a LayerMask from an array of layer indexes.
|
||||
/// </summary>
|
||||
public static LayerMask Create(params int[] layerNumbers)
|
||||
{
|
||||
return LayerNumbersToMask(layerNumbers);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a LayerMask from a number of layer names.
|
||||
/// </summary>
|
||||
public static LayerMask NamesToMask(params string[] layerNames)
|
||||
{
|
||||
LayerMask ret = (LayerMask)0;
|
||||
foreach(var name in layerNames)
|
||||
{
|
||||
ret |= (1 << LayerMask.NameToLayer(name));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a LayerMask from a number of layer indexes.
|
||||
/// </summary>
|
||||
public static LayerMask LayerNumbersToMask(params int[] layerNumbers)
|
||||
{
|
||||
LayerMask ret = (LayerMask)0;
|
||||
foreach(var layer in layerNumbers)
|
||||
{
|
||||
ret |= (1 << layer);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Inverts a LayerMask.
|
||||
/// </summary>
|
||||
public static LayerMask Inverse(this LayerMask original)
|
||||
{
|
||||
return ~original;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a number of layer names to an existing LayerMask.
|
||||
/// </summary>
|
||||
public static LayerMask AddToMask(this LayerMask original, params string[] layerNames)
|
||||
{
|
||||
return original | NamesToMask(layerNames);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes a number of layer names from an existing LayerMask.
|
||||
/// </summary>
|
||||
public static LayerMask RemoveFromMask(this LayerMask original, params string[] layerNames)
|
||||
{
|
||||
LayerMask invertedOriginal = ~original;
|
||||
return ~(invertedOriginal | NamesToMask(layerNames));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a string array of layer names from a LayerMask.
|
||||
/// </summary>
|
||||
public static string[] MaskToNames(this LayerMask original)
|
||||
{
|
||||
var output = new List<string>();
|
||||
|
||||
for (int i = 0; i < 32; ++i)
|
||||
{
|
||||
int shifted = 1 << i;
|
||||
if ((original & shifted) == shifted)
|
||||
{
|
||||
string layerName = LayerMask.LayerToName(i);
|
||||
if (!string.IsNullOrEmpty(layerName))
|
||||
{
|
||||
output.Add(layerName);
|
||||
}
|
||||
}
|
||||
}
|
||||
return output.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns an array of layer indexes from a LayerMask.
|
||||
/// </summary>
|
||||
public static int[] MaskToNumbers(this LayerMask original)
|
||||
{
|
||||
var output = new List<int>();
|
||||
|
||||
for (int i = 0; i < 32; ++i)
|
||||
{
|
||||
int shifted = 1 << i;
|
||||
if ((original & shifted) == shifted)
|
||||
{
|
||||
output.Add(i);
|
||||
}
|
||||
}
|
||||
return output.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a LayerMask to a string.
|
||||
/// </summary>
|
||||
public static string MaskToString(this LayerMask original)
|
||||
{
|
||||
return MaskToString(original, ", ");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a LayerMask to a string using the specified delimiter.
|
||||
/// </summary>
|
||||
public static string MaskToString(this LayerMask original, string delimiter)
|
||||
{
|
||||
return string.Join(delimiter, MaskToNames(original));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user