using AGXUnity;
using AGXUnity.IO.OpenPLX;
using UnityEngine;
using UnityEngine.InputSystem;

/// <summary>
/// This script is a ported version of the controller provided in the t05-excavator OpenPLX tutorial, using the InputActionMapper
/// </summary>
public class ExcavatorManeuvering : MonoBehaviour
{
  // Expose scaling factors used when mapping InputActions to OpenPLX signals
  public float BoomSwingAmplitude = 0.3f;
  public float BoomLiftAmplitude = 0.1f;
  public float StickLiftAmplitude = 0.2f;
  public float BucketTiltAmplitude = 0.5f;
  public InputActionAsset ActionMapAsset;

  private OpenPLXSignals m_signals;
  InputActionMapper m_actionMapper;

  void Start()
  {
    // Setup signal mapper
    m_signals = GetComponent<OpenPLXSignals>().GetInitialized();
    m_actionMapper = new InputActionMapper( ActionMapAsset, "Excavator" );

    // Create maps from InputActions to OpenPLX inputs
    var signalInterface = m_signals.Interfaces[0];
    m_actionMapper.CreateMap( signalInterface.FindInput( "swing_motor_velocity_input" ), "BoomSwing", BoomSwingAmplitude );
    m_actionMapper.CreateMap( signalInterface.FindInput( "boom_motor_velocity_input" ), "BoomLift", BoomLiftAmplitude );
    m_actionMapper.CreateMap( signalInterface.FindInput( "stick_motor_velocity_input" ), "StickLift", StickLiftAmplitude );
    m_actionMapper.CreateMap( signalInterface.FindInput( "bucket_motor_velocity_input" ), "BucketTilt", BucketTiltAmplitude );
  }
}
