using UnityEngine;
namespace AxibugEmuOnline.Client.InputDevices
{
///
/// 输入设备的抽象控件接口
///
public abstract class InputControl
{
/// 控件所属设备
public InputDevice Device { get; internal set; }
/// 获取该控件是否在当前调用帧被激发
public bool Start { get; private set; }
/// 获取该控件是否在当前调用帧被释放
public bool Release { get; private set; }
bool m_performingLastFrame;
/// 获取该控件是否在当前调用帧是否处于活动状态
public virtual bool Performing => Device.Resolver.CheckPerforming(this);
/// 获得该控件的以二维向量表达的值
///
public virtual Vector2 GetVector2() => Device.Resolver.GetVector2(this);
/// 获得该控件的以浮点数表达的值
public virtual float GetFlaot() => Device.Resolver.GetFloat(this);
internal void Update()
{
UpdateReleaseStartState();
OnUpdate();
}
private void UpdateReleaseStartState()
{
var oldPerforming = m_performingLastFrame;
var newPerforming = Performing;
Start = false;
Release = false;
if (oldPerforming != newPerforming)
{
if (oldPerforming == false) Start = true;
else Release = true;
}
m_performingLastFrame = Performing;
}
protected virtual void OnUpdate() { }
/// 控件名,这个控件名称必须是唯一的
public abstract string ControlName { get; }
internal InputControl(InputDevice device)
{
Device = device;
}
}
}