using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
namespace MoreMountains.Tools
{
///
/// Game object extensions
///
public static class GameObjectExtensions
{
static List m_ComponentCache = new List();
///
/// Grabs a component without allocating memory uselessly
///
///
///
///
public static Component MMGetComponentNoAlloc(this GameObject @this, System.Type componentType)
{
@this.GetComponents(componentType, m_ComponentCache);
Component component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null;
m_ComponentCache.Clear();
return component;
}
///
/// Grabs a component without allocating memory uselessly
///
///
///
///
public static T MMGetComponentNoAlloc(this GameObject @this) where T : Component
{
@this.GetComponents(typeof(T), m_ComponentCache);
Component component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null;
m_ComponentCache.Clear();
return component as T;
}
///
/// Grabs a component on the object, or on its children objects, or on a parent, or adds it to the object if none were found
///
///
///
///
public static T MMGetComponentAround(this GameObject @this) where T : Component
{
T component = @this.GetComponentInChildren(true);
if (component == null)
{
component = @this.GetComponentInParent();
}
if (component == null)
{
component = @this.AddComponent();
}
return component;
}
}
}