using UnityEngine.Scripting.APIUpdating; namespace UnityEngine.U2D.IK { /// /// General utilities for 2D IK. /// [MovedFrom("UnityEngine.Experimental.U2D.IK")] public class IKUtility { /// /// Check if a Unity Transform is a descendent of another Unity Transform. /// /// Unity Transform to check. /// Unity Transform ancestor. /// Returns true if the Unity Transform is a descendent. False otherwise. public static bool IsDescendentOf(Transform transform, Transform ancestor) { Debug.Assert(transform != null, "Transform is null"); var currentParent = transform.parent; while (currentParent) { if (currentParent == ancestor) return true; currentParent = currentParent.parent; } return false; } /// /// Gets the hierarchy depth of a Unity Transform. /// /// Unity Transform to check. /// Integer value for hierarchy depth. public static int GetAncestorCount(Transform transform) { Debug.Assert(transform != null, "Transform is null"); var ancestorCount = 0; while (transform.parent) { ++ancestorCount; transform = transform.parent; } return ancestorCount; } /// /// Gets the maximum chain count for a IKChain2D. /// /// IKChain2D to query. /// Integer value for the maximum chain count. public static int GetMaxChainCount(IKChain2D chain) { var maxChainCount = 0; if (chain.effector) maxChainCount = GetAncestorCount(chain.effector) + 1; return maxChainCount; } } }