using UnityEngine;
using UnityEngine.EventSystems;
namespace AxiInputSP.UGUI
{
public class AxiIptButton : UnityEngine.UI.Button
{
enum AxiButtonState
{
None,
KeyUp,
KeyDown,
KeyHold
}
AxiButtonState m_state = AxiButtonState.None;
///
/// 键值(支持组合键)
///
[SerializeField]
public AxiInputUGuiBtnType[] axiBtnTypeList;
public bool GetKey()
{
return m_state >= AxiButtonState.KeyDown;
}
public bool GetKeyUp()
{
return m_state == AxiButtonState.KeyUp;
}
public bool GetKeyDown()
{
return m_state == AxiButtonState.KeyDown;
}
///
/// 重设键值(如按钮重新隐藏之后)
///
public void ResetKeyState()
{
m_state = AxiButtonState.None;
}
public override void OnPointerDown(PointerEventData eventData)
{
base.OnPointerDown(eventData);
//如果之前帧是KeyUp或None,则为KeyDown|KeyHold
if (m_state <= AxiButtonState.KeyUp)
m_state = AxiButtonState.KeyDown;
//如果之前帧是KeyDown,则为KeyHold
else if (m_state == AxiButtonState.KeyDown)
m_state = AxiButtonState.KeyHold;
}
public override void OnPointerUp(PointerEventData eventData)
{
base.OnPointerUp(eventData);
//如果之前帧是KeyDown|KeyHold,则为KeyUp|None
if (m_state >= AxiButtonState.KeyDown)
m_state = AxiButtonState.KeyUp;
//如果之前帧是KeyUp,则为None
else if (m_state == AxiButtonState.KeyUp)
m_state = AxiButtonState.None;
}
}
}