using System; using System.Collections.Generic; using System.Reflection; 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; DefineControls(); } private void DefineControls() { foreach (var field in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)) { if (!typeof(InputControl_C).IsAssignableFrom(field.FieldType)) continue; var controlIns = Activator.CreateInstance(field.FieldType, this, field.Name) as InputControl_C; field.SetValue(this, controlIns); m_controlMapper[field.Name] = controlIns; } } public void Update() { AnyKeyDown = false; foreach (var control in m_controlMapper.Values) { control.Update(); if (control.Start) { AnyKeyDown = true; } } } public override string ToString() { return Resolver.GetDeviceName(this); } } }