You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
C#
69 lines
2.1 KiB
C#
using System;
|
|
using D2D.Core;
|
|
using D2D.Gameplay;
|
|
using D2D.Utilities;
|
|
using D2D.Utils;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
namespace D2D.Utilities
|
|
{
|
|
public static class LazySugar
|
|
{
|
|
/// <summary>
|
|
/// Finds the lazy GameObject or creates it.
|
|
/// </summary>
|
|
public static T FindLazy<T>(this MonoBehaviour target) where T: Component, ILazy
|
|
{
|
|
var instances = GameObject.FindObjectsOfType<T>();
|
|
|
|
// More than 1 ILazyCreating is an error
|
|
if (instances?.Length > 1)
|
|
{
|
|
Debug.LogError("There are more than 1 LazyCreating objects! " +
|
|
"Please, find the duplicates and remove them.");
|
|
}
|
|
|
|
// Create automatically if object not exist
|
|
if (instances is {Length: 0})
|
|
{
|
|
if (CoreSettings.Instance.lazyRuntimeCreationEnabled)
|
|
{
|
|
string lazyName = $"{typeof(T).Name} [created at runtime]";
|
|
return new GameObject(lazyName, typeof(T)).GetComponent<T>();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
return instances[0];
|
|
}
|
|
|
|
public static T FindLazy<T>() where T: Component, ILazy
|
|
{
|
|
var instances = GameObject.FindObjectsOfType<T>();
|
|
|
|
// More than 1 ILazyCreating is an error
|
|
if (instances?.Length > 1)
|
|
{
|
|
Debug.LogError("There are more than 1 LazyCreating objects! " +
|
|
"Please, find the duplicates and remove them.");
|
|
}
|
|
|
|
// Create automatically if object not exist
|
|
if (instances != null && instances.Length == 0)
|
|
{
|
|
if (CoreSettings.Instance.lazyRuntimeCreationEnabled)
|
|
{
|
|
string lazyName = $"{typeof(T).Name} [created at runtime]";
|
|
return new GameObject(lazyName, typeof(T)).GetComponent<T>();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
return instances[0];
|
|
}
|
|
}
|
|
}
|