Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
ai.fluctio.fluctio-sim / Utils / General / EditorStubs.cs
Size: Mime:
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);
				}
			);
		}
		
	}
}