Repository URL to install this package:
Version:
1.3.1 ▾
|
using System;
using JetBrains.Annotations;
using UnityEngine;
using Object = UnityEngine.Object;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace Fluctio.FluctioSim.Utils.General
{
public static class EditorStubs
{
private static InvalidOperationException UsageException => new("Function used incorrectly. Usage:\n" +
$"{nameof(Execute)}(#if UNITY_EDITOR editModeAction, #endif runtimeAction);");
/// <inheritdoc cref="Execute(System.Action, System.Action)"/>
private static void Execute([CanBeNull] Action runtimeAction)
{
if (Application.isEditor)
{
throw UsageException;
}
runtimeAction?.Invoke();
}
/// <summary>
/// Allows conveniently executing different functions depending on runtime or edit mode.
/// Usage:
/// <code>
/// Execute(
/// #if UNITY_EDITOR
/// editModeAction,
/// #endif
/// runtimeAction
/// );
/// </code>
/// </summary>
private static void Execute([CanBeNull] Action editModeAction, [CanBeNull] Action runtimeAction)
{
if (!Application.isEditor)
{
throw UsageException;
}
if (Application.isPlaying)
{
runtimeAction?.Invoke();
}
else
{
editModeAction?.Invoke();
}
}
public static void DelayIfEditMode(Action action)
{
Execute(
#if UNITY_EDITOR
() =>
{
var callback = new EditorApplication.CallbackFunction(action);
EditorApplication.delayCall += callback;
},
#endif
action
);
}
public static void Destroy(Object obj)
{
Execute(
#if UNITY_EDITOR
() =>
{
Object.DestroyImmediate(obj);
},
#endif
() =>
{
Object.Destroy(obj);
}
);
}
}
}