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() { }
}
}