/// <summary> /// Query the devices if the input is blended /// </summary> /// <param name="input">The input command</param> /// <returns>True if blended input</returns> static public Boolean IsBlendedInput(String input) { Boolean blendedInput = false; blendedInput = DeviceCls.IsBlendedInput(input); // generic if (blendedInput) { return(blendedInput); } blendedInput = JoystickCls.IsBlendedInput(input); if (blendedInput) { return(blendedInput); } blendedInput = GamepadCls.IsBlendedInput(input); if (blendedInput) { return(blendedInput); } blendedInput = KeyboardCls.IsBlendedInput(input); if (blendedInput) { return(blendedInput); } blendedInput = MouseCls.IsBlendedInput(input); if (blendedInput) { return(blendedInput); } // others.. return(blendedInput); }
/// <summary> /// Try to derive the device class from the devInput string (mo1_, kb1_, xi1_, jsN_) /// </summary> /// <param name="devInput">The input command string dev_input format</param> /// <returns>A proper DeviceClass string</returns> static public String DeviceClassFromInput(String devInput) { String deviceClass = DeviceCls.DeviceClass; deviceClass = JoystickCls.DeviceClassFromInput(devInput); if (!DeviceCls.IsUndefined(deviceClass)) { return(deviceClass); } deviceClass = GamepadCls.DeviceClassFromInput(devInput); if (!DeviceCls.IsUndefined(deviceClass)) { return(deviceClass); } deviceClass = KeyboardCls.DeviceClassFromInput(devInput); if (!DeviceCls.IsUndefined(deviceClass)) { return(deviceClass); } deviceClass = MouseCls.DeviceClassFromInput(devInput); if (!DeviceCls.IsUndefined(deviceClass)) { return(deviceClass); } // others.. return(deviceClass); }
/// <summary> /// Extends the input to a device input if not already done /// </summary> /// <param name="input">An input</param> /// <param name="aDevice">The ActionDevice</param> /// <returns>A valid devInput (dev_input) format</returns> static public String DevInput(string input, ActionDevice aDevice) { switch (aDevice) { case ActionDevice.AD_Gamepad: return(GamepadCls.DevInput(input)); case ActionDevice.AD_Joystick: return(JoystickCls.DevInput(input)); case ActionDevice.AD_Keyboard: return(KeyboardCls.DevInput(input)); case ActionDevice.AD_Mouse: return(MouseCls.DevInput(input)); default: return(input); } }
/// <summary> /// Return the color of a device /// </summary> /// <param name="devInput">The devinput (determine JS colors)</param> /// <param name="aDevice">The ActionDevice</param> /// <returns>The device color</returns> static public System.Drawing.Color DeviceColor(string devInput) { // background is along the input ActionDevice aDevice = ADeviceFromInput(devInput); switch (aDevice) { case ActionDevice.AD_Gamepad: return(GamepadCls.XiColor( )); case ActionDevice.AD_Joystick: { int jNum = JoystickCls.JSNum(devInput); // need to know which JS return(JoystickCls.JsNColor(jNum)); } case ActionDevice.AD_Keyboard: return(KeyboardCls.KbdColor( )); case ActionDevice.AD_Mouse: return(MouseCls.MouseColor( )); default: return(MyColors.UnassignedColor); } }
/// <summary> /// Read an action from XML - do some sanity check /// </summary> /// <param name="xml">the XML action fragment</param> /// <returns>True if an action was decoded</returns> public Boolean fromXML(String xml) { XmlReaderSettings settings = new XmlReaderSettings( ); settings.ConformanceLevel = ConformanceLevel.Fragment; settings.IgnoreWhitespace = true; settings.IgnoreComments = true; XmlReader reader = XmlReader.Create(new StringReader(xml), settings); reader.Read( ); if (reader.Name.ToLowerInvariant( ) == "action") { if (reader.HasAttributes) { name = reader["name"]; reader.ReadStartElement("action"); // Checks that the current content node is an element with the given Name and advances the reader to the next node } else { return(false); } } do { // support AC2 and AC1 i.e. without and with device attribute if (reader.Name.ToLowerInvariant( ) == "rebind") { if (reader.HasAttributes) { device = reader["device"]; String input = reader["input"]; if (String.IsNullOrEmpty(input)) { return(false); // ERROR exit } input = DeviceCls.fromXML(input); // move from external to internal blend if (String.IsNullOrEmpty(device)) { // AC2 style - derive the device (Device.DeviceClass) device = DeviceClassFromInput(input); } else { // AC1 style - need to reformat mouse and keyboard according to AC2 style now if (KeyboardCls.IsDeviceClass(device)) { input = KeyboardCls.FromAC1(input); } else if (MouseCls.IsDeviceClass(device)) { input = MouseCls.FromAC1(input); } else if (GamepadCls.IsDeviceClass(device)) { input = GamepadCls.FromAC1(input); } } //first find an ActivationMode if there is - applies to all actions // this can be an Activation Mode OR a multitap // if there is an activationMode - copy the one from our List // if no ActivationMode is given, create one with multitap 1 or may be 2... string actModeName = reader["ActivationMode"]; ActivationMode actMode = null; if (!string.IsNullOrEmpty(actModeName)) { actMode = ActivationModes.Instance.ActivationModeByName(actModeName); // should be a valid ActivationMode for this action } else { actMode = new ActivationMode(ActivationMode.Default); // no specific name given, use default string multiTap = reader["multiTap"]; if (!string.IsNullOrEmpty(multiTap)) { actMode.MultiTap = int.Parse(multiTap); // modify with given multiTap } } key = DevTag(device) + name; // unique id of the action actionDevice = ADevice(device); // get the enum of the input device AddCommand(input, actMode); // advances the reader to the next node reader.ReadStartElement("rebind"); } } else if (reader.Name.ToLowerInvariant( ) == "addbind") { if (reader.HasAttributes) { device = reader["device"]; String input = reader["input"]; if (String.IsNullOrEmpty(input)) { return(false); // ERROR exit } input = DeviceCls.fromXML(input); // move from external to internal blend if (String.IsNullOrEmpty(device)) { // AC2 style - derive the device (Device.DeviceClass) device = DeviceClassFromInput(input); } else { // AC1 style - need to reformat according to AC2 style now if (KeyboardCls.IsDeviceClass(device)) { input = KeyboardCls.FromAC1(input); } else if (MouseCls.IsDeviceClass(device)) { input = MouseCls.FromAC1(input); } else if (GamepadCls.IsDeviceClass(device)) { input = GamepadCls.FromAC1(input); } } //first find an ActivationMode if there is - applies to all actions // this can be an Activation Mode OR a multitap // if there is an activationMode - copy the one from our List // if no ActivationMode is given, create one with multitap 1 or may be 2... string actModeName = reader["ActivationMode"]; ActivationMode actMode = null; if (!string.IsNullOrEmpty(actModeName)) { actMode = ActivationModes.Instance.ActivationModeByName(actModeName); // should be a valid ActivationMode for this action } else { actMode = new ActivationMode(ActivationMode.Default); // no specific name given, use default string multiTap = reader["multiTap"]; if (!string.IsNullOrEmpty(multiTap)) { actMode.MultiTap = int.Parse(multiTap); // modify with given multiTap } } AddCommand(input, actMode); // advances the reader to the next node reader.ReadStartElement("addbind"); } } else { return(false); } } while (reader.Name == "addbind"); return(true); }