Repository URL to install this package:
Version:
1.3.1 ▾
|
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
}
}