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 Fluctio.FluctioSim.Core.Components.Base;
using Fluctio.FluctioSim.Core.Components.Prefabs.Primitives.Base;
using Fluctio.FluctioSim.Utils.General;
using Mujoco;
using UnityEngine;

namespace Fluctio.FluctioSim.Core.Components.MachineLearning.Actuating
{
	public abstract class Actuator : InternalsEditorComponent
	{
		
		#region Inspector settings
		[SerializeField] public PrimitiveJoint joint;
		[SerializeField] public Control control;
		#endregion
		
		#region Components setup
		[SerializeField, HideInInspector] protected GameObject actuatorObject;
		[SerializeField, HideInInspector] protected MjActuator mujocoActuator;
		[SerializeField, HideInInspector] protected string actuatorName = "";

		protected override void InitializeOnce()
		{
			base.InitializeOnce();

			actuatorObject = CreateInternalObject("Actuator");
			mujocoActuator = CreateInternalComponent<MjActuator>(actuatorObject);
			
			var joints = GetComponents<PrimitiveJoint>();
			if (joints.Length == 1)
			{
				joint = joints[0];
			} else {
				Debug.LogWarning("Please, set the actuator's joint manually");	
			}
		}

		public override void InitializePrefab()
		{
			if (actuatorName == "")
			{
				actuatorName = NameGenerator.GenerateName();	
			}
		}
		
		#endregion
		
		#region Component changes

		public override void OnAnyChanged()
		{
			base.OnAnyChanged();
			mujocoActuator.Joint = joint?.JointComponent;
		}
		
		#endregion

		#region Runtime functionality
		
		protected void FixedUpdate()
		{
			mujocoActuator.Control = control.GetActions().GetOneContinuous();
		}

		#endregion

	}
}