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 Fluctio.FluctioSim.Common.Configuration;
using Fluctio.FluctioSim.Utils.General;
using Unity.MLAgents.Actuators;
using UnityEngine;

namespace Fluctio.FluctioSim.Core.Components.MachineLearning.Actuating
{
	[AddComponentMenu(Config.PrefixedName+"/Machine Learning/Actuating/Direct Control", Config.ComponentMenuOrder + 500)]
	public class DirectControl : Control
	{
		
		#region Properties in GUI
		
		[SerializeField] protected ManualInputAxis inputAxis = ManualInputAxis.None;
		[SerializeField, Tooltip("Used for deterministic sorting and for identifying")] protected string actionName = "";
		
		#endregion
		
		#region Components setup
		
		[SerializeField, HideInInspector] protected GameObject controlObject;
		[SerializeField, HideInInspector] protected ProxyMlActuatorComponent mlagentsActuator;

		protected override void InitializeOnce()
		{
			base.InitializeOnce();
			
			controlObject = CreateInternalObject("Control");
			mlagentsActuator = CreateInternalComponent<ProxyMlActuatorComponent>(controlObject);

			mlagentsActuator.originalControl = this;
		}

		public override void InitializePrefab()
		{
			if (actionName == "")
			{
				actionName = NameGenerator.GenerateName();	
			}
		}
		
		#endregion

		#region Actions
		
		private ActionBuffers _actionBuffers;

		public override ActionBuffers GetActions()
		{
			return _actionBuffers;
		}

		public virtual void OnActionReceived(in ActionBuffers actionBuffers)
		{
			_actionBuffers = actionBuffers;
		}
		
		#endregion
		
		#region Heuristics

		public virtual bool IsHeuristicsEnabled => inputAxis != ManualInputAxis.None;

		protected float GetManualValue()
		{
			var axisName = Enum.GetName(typeof(ManualInputAxis), inputAxis);
			var axisValue = Input.GetAxis(axisName);
			return axisValue;
		}

		public virtual void Heuristic(in ActionBuffers actionBuffers)
		{
			var axisValue = GetManualValue();
			actionBuffers.SetOneContinuous(axisValue);
		}
		
		#endregion
		
		#region Other definitions
		
		public virtual string ActuatorName => actionName;
		public virtual ActionSpec ActionSpec => ActionSpec.MakeContinuous(1);
		public virtual void WriteDiscreteActionMask(IDiscreteActionMask actionMask) {}
		public virtual void ResetData() {}
		
		#endregion
		
	}
	
	public enum ManualInputAxis
	{
		None,
		Horizontal,
		Vertical,
	}
}