using System;
using JetBrains.Annotations;
using Omega.Tools;
using UnityEngine;
///
/// Класс содержащий расширения для GameObject`ов
///
public static class GameObjectExtensions
{
///
/// Возвращает компонент, прикрепленный к объекту. Если экземпляр компонента заданного типа отсутствует на объекте
/// то он будет добавлен к объекту.
///
/// Игровой объект
/// Тип компонента
/// Экземпляр компонента
/// Параметр >указывает на null
/// Параметр >указывает на уничтоженный объект
[NotNull]
public static T MissingComponent([NotNull] this GameObject gameObject) where T : Component
{
if (ReferenceEquals(gameObject, null))
throw new NullReferenceException(nameof(gameObject));
if (!gameObject)
throw new MissingReferenceException(nameof(gameObject));
return GameObjectUtility.MissingComponentWithoutChecks(gameObject);
}
///
/// Пытается найти объект на компоненте, если компонент найден вернет true а >будет указывать на найденный объект,
/// в противном случае, вернет false, а >будет указывать на null
///
/// Игровой объект
/// Ссылка на найденный объект (null, если объект не найден)
/// Тип компонента
/// true - компонент найден, false - объект не найден
/// Параметр >указывает на null
/// Параметр >указывает на уничтоженный объект
public static bool TryGetComponent([NotNull] this GameObject gameObject, [CanBeNull] out T component)
where T : Component
{
if (ReferenceEquals(gameObject, null))
throw new ArgumentNullException(nameof(gameObject));
if (!gameObject)
throw new MissingReferenceException(nameof(gameObject));
return GameObjectUtility.TryGetComponentWithoutChecks(gameObject, out component);
}
///
/// Возвращает всех потомков для игрового объекта
///
/// Массив потомков
/// Параметр >указывает на null
/// Параметр >указывает на уничтоженный объект
public static Transform[] GetChildes(this GameObject gameObject)
{
if (ReferenceEquals(gameObject, null))
throw new NullReferenceException(nameof(gameObject));
if (!gameObject)
throw new MissingReferenceException(nameof(gameObject));
return TransformUtility.GetChildesWithoutChecks(gameObject.transform);
}
}