using System.Collections.Generic; namespace AxibugEmuOnline.Client.InputDevices { public abstract class InputDevice_D { public string UniqueName => m_resolver.GetDeviceName(this); /// 指示该设备是否在线 public bool Online => m_resolver.CheckOnline(this); /// 指示该设备当前帧是否有任意控件被激发 public bool AnyKeyDown { get; private set; } /// 获得输入解决器 internal InputResolver Resolver => m_resolver; protected Dictionary m_controlMapper = new Dictionary(); protected InputResolver m_resolver; public InputDevice_D(InputResolver resolver) { m_resolver = resolver; foreach (var control in DefineControls()) { m_controlMapper.Add(control.ControlName, control); } } public void Update() { AnyKeyDown = false; foreach (var control in m_controlMapper.Values) { control.Update(); if (control.Start) { AnyKeyDown = true; } } } /// 用于列出这个输入设备的所有输入控件实例 /// protected abstract List DefineControls(); /// 通过控件名称,找到对应的控件 /// /// public InputControl_D FindControlByName(string controlName) { m_controlMapper.TryGetValue(controlName, out var key); return key; } } }