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

namespace Fluctio.FluctioSim.Core.Components.MachineLearning.Actuating
{
	[AddComponentMenu(Config.PrefixedName+"/Machine Learning/Actuating/Direct Control", Config.ComponentMenuOrder + 40)]
	public class DirectControl : Control
	{
		
		[SerializeField] protected ManualInputAxis inputAxis = ManualInputAxis.None;
		
		#region Components setup
		
		[SerializeField, HideInInspector] protected GameObject controlObject;
		[SerializeField, HideInInspector] protected ProxyMlActuatorComponent mlagentsActuator;
		[SerializeField, HideInInspector] protected string actuatorName = "";

		protected override void InitializeOnce()
		{
			base.InitializeOnce();
			
			controlObject = new GameObject("Control");
			controlObject.transform.SetParent(transform);
			mlagentsActuator = controlObject.AddComponent<ProxyMlActuatorComponent>();

			mlagentsActuator.originalControl = this;
		}

		public override void InitializePrefab()
		{
			if (actuatorName == "")
			{
				actuatorName = NameGenerator.GenerateName();	
			}
		}

		protected override IEnumerable<GameObject> GetInternalObjects() => new[] {controlObject};
		protected override IEnumerable<Object> GetCreatedInternals() => new[] {controlObject};
		
		#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;

		public virtual void Heuristic(in ActionBuffers actionBuffers) {
			var axisName = Enum.GetName(typeof(ManualInputAxis), inputAxis);
			var continuousActions = actionBuffers.ContinuousActions;
			continuousActions[0] = Input.GetAxis(axisName);
		}
		
		#endregion
		
		#region Other definitions
		
		public virtual string ActuatorName => actuatorName;
		public virtual ActionSpec ActionSpec => ActionSpec.MakeContinuous(1);
		public virtual void WriteDiscreteActionMask(IDiscreteActionMask actionMask) {}
		public virtual void ResetData() {}
		
		#endregion
		
	}
	
	public enum ManualInputAxis
	{
		None,
		Horizontal,
		Vertical,
	}
}