This repository has been archived on 2020-08-22. You can view files and clone it, but cannot push or open issues or pull requests.
flutter-unity-view-widget/example/Unity/Demo App/Library/PackageCache/com.unity.textmeshpro@1.3.0/Scripts/Editor/TMPro_SortingLayerHelper.cs

105 lines
3.6 KiB
C#

/*
* Copyright (c) 2014, Nick Gravelyn.
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using UnityEngine;
using UnityEditor;
using System;
using System.Reflection;
namespace TMPro
{
// Helpers used by the different sorting layer classes.
public static class SortingLayerHelper
{
private static Type _utilityType;
private static PropertyInfo _sortingLayerNamesProperty;
private static MethodInfo _getSortingLayerUserIdMethod;
static SortingLayerHelper()
{
_utilityType = Type.GetType("UnityEditorInternal.InternalEditorUtility, UnityEditor");
_sortingLayerNamesProperty = _utilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);
_getSortingLayerUserIdMethod = _utilityType.GetMethod("GetSortingLayerUniqueID", BindingFlags.Static | BindingFlags.NonPublic);
}
// Gets an array of sorting layer names.
// Since this uses reflection, callers should check for 'null' which will be returned if the reflection fails.
public static string[] sortingLayerNames
{
get
{
if (_sortingLayerNamesProperty == null)
{
return null;
}
return _sortingLayerNamesProperty.GetValue(null, null) as string[];
}
}
// Given the ID of a sorting layer, returns the sorting layer's name
public static string GetSortingLayerNameFromID(int id)
{
string[] names = sortingLayerNames;
if (names == null)
{
return null;
}
for (int i = 0; i < names.Length; i++)
{
if (GetSortingLayerIDForIndex(i) == id)
{
return names[i];
}
}
return null;
}
// Given the name of a sorting layer, returns the ID.
public static int GetSortingLayerIDForName(string name)
{
string[] names = sortingLayerNames;
if (names == null)
{
return 0;
}
return GetSortingLayerIDForIndex(Array.IndexOf(names, name));
}
// Helper to convert from a sorting layer INDEX to a sorting layer ID. These are not the same thing.
// IDs are based on the order in which layers were created and do not change when reordering the layers.
// Thankfully there is a private helper we can call to get the ID for a layer given its index.
public static int GetSortingLayerIDForIndex(int index)
{
if (_getSortingLayerUserIdMethod == null)
{
return 0;
}
return (int)_getSortingLayerUserIdMethod.Invoke(null, new object[] { index });
}
}
}