Skip to content
Snippets Groups Projects
AxisInputButton.cs 3.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • using UnityEngine;
    using UnityEngine.UI;
    using UnityEngine.EventSystems;
    
    using static UIconfig;
    
    
    namespace PlayerCtrl
    {
        public class AxisInputButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
        {
            // designed to work in a pair with another axis touch button
            // (typically with one having -1 and one having 1 axisValues)
            public string axisName = "Horizontal"; // The name of the axis
            public float axisValue = 1; // The axis that the value has
            public float responseSpeed = 3; // The speed at which the axis touch button responds
            public float returnToCentreSpeed = 3; // The speed at which the button will return to its centre
    
            public int DPAD_ID;
            public int DPAD_subID;
    
    
            AxisInputButton m_PairedWith; // Which button this one is paired with
            CrossPlatformInputManager.VirtualAxis m_Axis; // A reference to the virtual axis as it is in the cross platform input
    
            
            void Start()
            {
    
            }
            void Update()
            {
    
            }
            
    
            void OnEnable()
            {
                if (!CrossPlatformInputManager.AxisExists(axisName))
                {
                    // if the axis doesnt exist create a new one in cross platform input
                    m_Axis = new CrossPlatformInputManager.VirtualAxis(axisName);
                    CrossPlatformInputManager.RegisterVirtualAxis(m_Axis);
                }
                else
                {
                    m_Axis = CrossPlatformInputManager.VirtualAxisReference(axisName);
                }
                FindPairedButton();
            }
    
            void FindPairedButton()
            {
                // find the other button witch which this button should be paired
                // (it should have the same axisName)
                var otherAxisButtons = FindObjectsOfType(typeof(AxisInputButton)) as  AxisInputButton[];
    
                if (otherAxisButtons != null)
                {
                    for (int i = 0; i < otherAxisButtons.Length; i++)
                    {
                        if (otherAxisButtons[i].axisName == axisName && otherAxisButtons[i] != this)
                        {
                            m_PairedWith = otherAxisButtons[i];
                        }
                    }
                }
            }
    
            void OnDisable()
            {
                // The object is disabled so remove it from the cross platform input system
                m_Axis.Remove();
            }
    
    
            public void OnPointerDown(PointerEventData data)
            {
                if (m_PairedWith == null)
                {
                    FindPairedButton();
                }
                // update the axis and record that the button has been pressed this frame
                m_Axis.Update(Mathf.MoveTowards(m_Axis.GetValue, axisValue, responseSpeed * Time.deltaTime));
                //GameObject.Find("TextUPress").GetComponent<Text>().text =  m_Axis.GetValue +", "+axisValue +", "+ responseSpeed +" * " +Time.deltaTime;
    
                //print("down");
                DPAD[DPAD_ID,DPAD_subID]= axisValue;
    
            }
    
    
            public void OnPointerUp(PointerEventData data)
            {
                m_Axis.Update(Mathf.MoveTowards(m_Axis.GetValue, 0, responseSpeed * Time.deltaTime));
    
                DPAD[DPAD_ID, DPAD_subID] = 0f;