using UnityEngine;

namespace AxibugEmuOnline.Client.InputDevices
{
    /// <summary>
    /// 摇杆类型的输入控件,支持的返回值为Vector2
    /// </summary>
    public class Stick : InputControl
    {
        string m_controlName;
        public override string ControlName => m_controlName;

        public VirtualButton UP { get; private set; }
        public VirtualButton Down { get; private set; }
        public VirtualButton Left { get; private set; }
        public VirtualButton Right { get; private set; }

        public Stick(InputDevice device, string controlName) : base(device)
        {
            m_controlName = controlName;

            UP = new VirtualButton(device);
            Down = new VirtualButton(device);
            Left = new VirtualButton(device);
            Right = new VirtualButton(device);
        }

        protected override void OnUpdate()
        {
            var axis = GetVector2();

            UP.m_performing = axis.y > 0f;
            UP.Update();

            Down.m_performing = axis.y < 0f;
            Down.Update();

            Left.m_performing = axis.x < 0f;
            Left.Update();

            Right.m_performing = axis.x > 0f;
            Right.Update();
        }


        public class VirtualButton : InputControl
        {
            internal bool m_performing;

            public VirtualButton(InputDevice device) : base(device) { }

            public override bool Performing
            {
                get => m_performing;
            }

            public override Vector2 GetVector2()
            {
                return default;
            }

            public override float GetFlaot()
            {
                return Performing ? 1 : 0;
            }

            public override string ControlName => "VirtualStickButton";
        }
    }
}