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    
Size: Mime:
using System;
using System.ComponentModel;
using Fluctio.FluctioSim.Common.Configuration;
using UnityEngine;
using Object = UnityEngine.Object;

namespace Fluctio.FluctioSim.Core.Components.MachineLearning.TriggerActions
{
	[AddComponentMenu(Config.PrefixedName+"/Machine Learning/Trigger Actions/Enable or Disable", Config.ComponentMenuOrder + 90)]
	public class EnableActiveChanger : TriggerAction
	{
		[field: SerializeField] public Object Object { get; private set; }
		[field: SerializeField] public EnabledMode EnabledMode { get; private set; } = EnabledMode.Toggle;
		
		public override void OnExecute()
		{
			if (Object is null)
			{
				return;
			}

			var isCurrentlyEnabled = Object switch
			{
				GameObject gameObj => gameObj.activeInHierarchy,
				Behaviour component => component.enabled,
				_ => throw new InvalidOperationException($"{nameof(Object)} should be either {nameof(GameObject)} or {nameof(Behaviour)}"),
			};
			
			var newEnabled = EnabledMode switch
			{
				EnabledMode.Toggle => !isCurrentlyEnabled,
				EnabledMode.SetToTrue => true,
				EnabledMode.SetToFalse => false,
				_ => throw new InvalidEnumArgumentException(
					nameof(EnabledMode),
					(int)EnabledMode,
					EnabledMode.GetType()),
			};
			
			switch (Object)
			{
				case GameObject gameObj:
					gameObj.SetActive(newEnabled);
					break;
				case Behaviour component:
					component.enabled = newEnabled;
					break;
				default:
					throw new InvalidOperationException($"{nameof(Object)} should be either {nameof(GameObject)} or {nameof(Behaviour)}");
			}
		}
	}

	public enum EnabledMode
	{
		Toggle,
		SetToTrue,
		SetToFalse,
	}
}