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; } } }