|
|
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.InputSystem;
- using NaughtyAttributes;
-
-
- /// <summary>
- ///
- /// </summary>
- public class HandController : MonoBehaviour
- {
-
- #region Inspector Fields
-
- [SerializeField, BoxGroup("References")]
- private Transform m_handTransform;
-
- [SerializeField, BoxGroup("References")]
- private OarController m_oar;
-
- [SerializeField,BoxGroup("settings")]
- private Transform m_otherHand;
-
- [SerializeField, BoxGroup("Settings")]
- private Vector3 m_axisNormal = Vector3.forward;
- [SerializeField, BoxGroup("Settings")]
- private Vector3 m_axisForward = Vector3.up;
-
- [SerializeField, BoxGroup("Settings")]
- private float m_armRange = 1;
-
- [SerializeField, BoxGroup("Settings"), Range(0.0f, 1.0f)]
- private float m_armSpeed = 0.5f;
-
- [SerializeField, BoxGroup("Settings")]
- private Vector2 m_startInput = new Vector2(0, 1);
-
- [SerializeField]
- private Vector3 m_IKOffset = new Vector3(0, 0, 0.05f);
-
- [SerializeField]
- private Quaternion m_IKRotationOffset;
-
-
- [SerializeField, BoxGroup("Input")]
- private InputActionProperty m_inputAxis;
-
- [SerializeField, BoxGroup("Input")]
- private InputActionProperty m_row;
-
-
-
- #endregion Inspector Fields
-
- #region Private Fields
-
- //Last input of player
- public Vector2 m_desiredInput;
- private Vector3 m_startPosition;
- private Vector3 m_lastPosition;
-
- private bool m_doUndo;
- #endregion Private Fields
-
- #region Getters
- public new Transform transform => m_handTransform;
- #endregion Getters
-
-
-
- #region MonoBehaviour Functions
-
- private void Start()
- {
- m_startPosition = transform.localPosition;
- UpdateHand(m_startInput);
- }
-
- /// <summary>
- /// OnEnable is called when the object becomes enabled and active.
- /// </summary>
- private void OnEnable()
- {
- m_inputAxis.action.performed += OnInputRecieved;
- m_inputAxis.action.canceled += OnInputRecieved;
- m_inputAxis.action.Enable();
- m_row.action?.Enable();
- }
-
- /// <summary>
- /// OnDisable is called when the behaviour becomes disabled.
- /// </summary>
- private void OnDisable()
- {
- m_inputAxis.action.performed -= OnInputRecieved;
- m_inputAxis.action.canceled -= OnInputRecieved;
- m_inputAxis.action.Disable();
- m_row.action?.Disable();
- }
-
- /// <summary>
- /// Update is called once per frame
- /// </summary>
- private void FixedUpdate()
- {
- //UpdateHand(m_desiredInput);
- }
-
- public Vector3 GetIKPosition()
- {
- return transform.position + transform.TransformDirection(m_IKOffset);
- }
-
- public Quaternion GetIKRotation()
- {
- return m_oar.transform.rotation * m_IKRotationOffset;
- }
- #endregion MonoBehaviour Functions
-
- #region Class Functionality
-
- /// <summary>
- /// Called every fixed update to move the arms
- /// </summary>
- /// <param name="input"></param>
- public void UpdateHand(Vector2 input, bool registerUndo = true)
- {
-
- m_lastPosition = transform.localPosition;
-
-
-
- Quaternion rotation = Quaternion.LookRotation(m_axisForward.normalized, m_axisNormal.normalized);
- Vector3 axisInput = rotation * new Vector3(input.x, 0, input.y);
-
- Vector3 desiredPosition = m_startPosition + axisInput * m_armRange;
- transform.localPosition = Vector3.Lerp(transform.localPosition, desiredPosition, m_armSpeed);
-
- if (m_row.action != null)
- {
- if (m_row.action.IsPressed())
- {
- transform.localPosition = Vector3.Lerp(transform.localPosition, m_otherHand.localPosition, 0.5f);
- }
- }
-
-
- }
-
- public void UndoLastMovement()
- {
- Vector3 direction = m_lastPosition - transform.localPosition;
-
- transform.localPosition = m_lastPosition;
-
- }
-
-
- /// <summary>
- /// Called by the input system when the input is changed
- /// </summary>
- /// <param name="args"></param>
- private void OnInputRecieved(InputAction.CallbackContext args)
- {
-
- m_desiredInput = args.ReadValue<Vector2>();
- }
-
-
- #endregion Class Functionality
-
- #region Editor Functions
- /// <summary>
- /// Called when the Component is created or Reset from the Inspector
- /// </summary>
- private void Reset()
- {
- m_handTransform = base.transform;
- }
- #endregion Editor Functions
-
- }
|