using System; using System.Collections.Generic; namespace UnityEngine.U2D.IK { /// /// Base class used for defining culling strategies for IKManager2D. /// internal abstract class BaseCullingStrategy { public bool enabled => m_IsCullingEnabled; bool m_IsCullingEnabled; HashSet m_RequestingManagers; /// /// Used to check if bone transforms should be culled. /// /// A collection of bones' transform ids. /// True if any bone is visible. public abstract bool AreBonesVisible(IList transformIds); public void AddRequestingObject(object requestingObject) { if (!m_IsCullingEnabled) { m_IsCullingEnabled = true; Initialize(); } m_RequestingManagers.Add(requestingObject); } public void RemoveRequestingObject(object requestingObject) { if (m_RequestingManagers.Remove(requestingObject) && m_RequestingManagers.Count == 0) { m_IsCullingEnabled = false; Disable(); } } public void Initialize() { m_RequestingManagers = new HashSet(); OnInitialize(); } public void Update() { OnUpdate(); } public void Disable() { OnDisable(); } protected virtual void OnInitialize() { } protected virtual void OnUpdate() { } protected virtual void OnDisable() { } } }