Skip to content

Commit

Permalink
Adder LayerMask and Improvements to TagLayerManager
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelsakharov committed Apr 11, 2024
1 parent ce8727a commit 6685502
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 5 deletions.
54 changes: 54 additions & 0 deletions Prowl.Runtime/GameObject/LayerMask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
namespace Prowl.Runtime;

public class LayerMask
{
private int mask;

public LayerMask()
{
mask = 0;
}

public void AddLayer(string layer)
{
int layerIndex = TagLayerManager.GetLayerIndex(layer);
mask |= 1 << layerIndex;
}

public void RemoveLayer(string layer)
{
int layerIndex = TagLayerManager.GetLayerIndex(layer);
if (layerIndex != -1)
mask &= ~(1 << layerIndex);
}

public bool Contains(string layer)
{
int layerIndex = TagLayerManager.GetLayerIndex(layer);
return layerIndex != -1 && ((mask >> layerIndex) & 1) != 0;
}

public bool Intersects(LayerMask other)
{
return (mask & other.mask) != 0;
}

public static implicit operator int(LayerMask mask)
{
return mask.mask;
}

public static LayerMask operator |(LayerMask mask1, LayerMask mask2)
{
LayerMask result = new LayerMask();
result.mask = mask1.mask | mask2.mask;
return result;
}

public static LayerMask operator &(LayerMask mask1, LayerMask mask2)
{
LayerMask result = new LayerMask();
result.mask = mask1.mask & mask2.mask;
return result;
}
}
28 changes: 23 additions & 5 deletions Prowl.Runtime/GameObject/TagLayerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,29 @@ public class TagLayerManager : ScriptableSingleton<TagLayerManager>
public static List<string> Tags => Instance.tags;
public static List<string> Layers => Instance.layers;

public static string GetTag(int index) { return Instance.tags[index]; }
public static string GetLayer(int index) { return Instance.layers[index]; }
public static string GetTag(int index)
{
if (index < 0 || index >= Instance.tags.Count)
return "Untagged";
return Instance.tags[index];
}
public static string GetLayer(int index)
{
if (index < 0 || index >= Instance.layers.Count)
return "Default";
return Instance.layers[index];
}

public static int GetTagIndex(string tag) { return Instance.tags.IndexOf(tag); }
public static int GetLayerIndex(string layer) { return Instance.layers.IndexOf(layer); }
public static int GetTagIndex(string tag)
{
int index = Instance.tags.IndexOf(tag);
return index == -1 ? 0 : index;
}
public static int GetLayerIndex(string layer)
{
int index = Instance.layers.IndexOf(layer);
return index == -1 ? 0 : index;
}

public static void RemoveTag(int index)
{
Expand All @@ -61,4 +79,4 @@ public static void RemoveLayer(int index)
foreach (var gameObject in EngineObject.FindObjectsOfType<GameObject>())
gameObject.layerIndex = layers.IndexOf(gameObject.layer);
}
}
}

0 comments on commit 6685502

Please sign in to comment.