using UnityEngine.Scripting.APIUpdating; namespace UnityEngine.U2D.IK { /// /// General utilities for 2D IK. /// [MovedFrom("UnityEngine.Experimental.U2D.IK")] public class IKUtility { /// /// Check if a transform is a descendent of another transform. /// /// Transforms to check. /// Transform's ancestor. /// Returns true if the 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 depth of the transform's hierarchy. /// /// 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; } } }