public InputKeyMapping(InputKeyMapping source) { this.AddRange(source); }
private static void generateControllerConfig_gamecube(string path, string rom, InputKeyMapping anyMapping) { generateControllerConfig_any(path, "GCPadNew.ini", "GCPad", anyMapping, gamecubeReverseAxes, gamecubeReplacements); }
private static void generateControllerConfig_any(string path, string filename, string anyDefKey, InputKeyMapping anyMapping, Dictionary <string, string> anyReverseAxes, Dictionary <string, string> anyReplacements, Dictionary <string, string> extraOptions = null) { //string path = Program.AppConfig.GetFullPath("dolphin"); string iniFile = Path.Combine(path, "User", "Config", filename); int nsamepad = 0; Dictionary <string, int> double_pads = new Dictionary <string, int>(); using (IniFile ini = new IniFile(iniFile, true)) { foreach (var pad in Program.Controllers) { string gcpad = anyDefKey + pad.PlayerIndex; ini.ClearSection(gcpad); if (pad.Config == null) { continue; } // SIDevice0 = 7 -> Keyb GCKeyNew.ini // SIDevice1 = 6 -> controlleur standard GCPadNew.ini string tech = "XInput"; string deviceName = "Gamepad"; if (pad.Config.Type == "keyboard") { tech = "DInput"; deviceName = "Keyboard Mouse"; } else if (!pad.Config.IsXInputDevice()) { var di = pad.Config.GetDirectInputInfo(); if (di == null) { continue; } tech = "DInput"; deviceName = di.Name; } if (double_pads.ContainsKey(tech + "/" + deviceName)) { nsamepad = double_pads[tech + "/" + deviceName]; } else { nsamepad = 0; } double_pads[tech + "/" + deviceName] = nsamepad + 1; ini.WriteValue(gcpad, "Device", tech + "/" + nsamepad.ToString() + "/" + deviceName); if (extraOptions != null) { foreach (var xtra in extraOptions) { ini.WriteValue(gcpad, xtra.Key, xtra.Value); } } foreach (var x in anyMapping) { string keyName = x.Value; if (pad.Config.Type == "keyboard") { var value = x.Value; if (x.Key == InputKey.a) { value = "Buttons/A"; } else if (x.Key == InputKey.b) { value = "Buttons/B"; } else if (x.Key == InputKey.up) { value = "Main Stick/Up"; } else if (x.Key == InputKey.down) { value = "Main Stick/Down"; } else if (x.Key == InputKey.left) { value = "Main Stick/Left"; } else if (x.Key == InputKey.right) { value = "Main Stick/Right"; } if (x.Key == InputKey.joystick1left || x.Key == InputKey.joystick1up) { continue; } var input = pad.Config[x.Key]; if (input == null) { continue; } var name = ToDolphinKey(input.Id); ini.WriteValue(gcpad, value, name); } else if (tech == "XInput") { var mapping = pad.Config.GetXInputMapping(x.Key); if (mapping != XINPUTMAPPING.UNKNOWN && xInputMapping.ContainsKey(mapping)) { ini.WriteValue(gcpad, x.Value, xInputMapping[mapping]); } string reverseAxis; if (anyReverseAxes.TryGetValue(x.Value, out reverseAxis)) { mapping = pad.Config.GetXInputMapping(x.Key, true); if (mapping != XINPUTMAPPING.UNKNOWN && xInputMapping.ContainsKey(mapping)) { ini.WriteValue(gcpad, reverseAxis, xInputMapping[mapping]); } } } else { var input = pad.Config[x.Key]; if (input == null) { continue; } if (input.Type == "button") { if (input.Id == 0) // Invert A & B { ini.WriteValue(gcpad, x.Value, "`Button 1`"); } else if (input.Id == 1) // Invert A & B { ini.WriteValue(gcpad, x.Value, "`Button 0`"); } else { ini.WriteValue(gcpad, x.Value, "`Button " + input.Id.ToString() + "`"); } } else if (input.Type == "hat") { string hat = "`Hat " + input.Id + " N`"; if (input.Value == 2) // SDL_HAT_RIGHT { hat = "`Hat " + input.Id + " E`"; } else if (input.Value == 4) // SDL_HAT_DOWN { hat = "`Hat " + input.Id + " S`"; } else if (input.Value == 8) // SDL_HAT_LEFT { hat = "`Hat " + input.Id + " W`"; } ini.WriteValue(gcpad, x.Value, hat); } else if (input.Type == "axis") { Func <Input, bool, string> axisValue = (inp, revertAxis) => { string axis = "`Axis "; if (inp.Id == 2 || inp.Id == 5) { axis += "Z"; } else if (inp.Id == 0 || inp.Id == 3) { axis += "X"; } else { axis += "Y"; } if (inp.Id == 3 || inp.Id == 4) { axis += "r"; } if (inp.Id == 5) { revertAxis = !revertAxis; } if ((!revertAxis && inp.Value > 0) || (revertAxis && inp.Value < 0)) { axis += "+"; } else { axis += "-"; } return(axis + "`"); }; ini.WriteValue(gcpad, x.Value, axisValue(input, false)); string reverseAxis; if (anyReverseAxes.TryGetValue(x.Value, out reverseAxis)) { ini.WriteValue(gcpad, reverseAxis, axisValue(input, true)); } } } } if (tech == "XInput") { // ini.WriteValue(gcpad, "Main Stick/Modifier", "`Thumb L`"); // ini.WriteValue(gcpad, "C-Stick/Modifier" , "`Thumb R`"); ini.WriteValue(gcpad, "Main Stick/Dead Zone", "5.0000000000000000"); ini.WriteValue(gcpad, "C-Stick/Dead Zone", "5.0000000000000000"); ini.WriteValue(gcpad, "Rumble/Motor", "`Motor L``Motor R`"); } } ini.Save(); } }
private static void generateControllerConfig_emulatedwiimotes(string path, string rom) { var extraOptions = new Dictionary <string, string>(); extraOptions["Source"] = "1"; var wiiMapping = new InputKeyMapping(_wiiMapping); if (rom.Contains(".side.") && Program.SystemConfig["controller_mode"] != "disabled" && Program.SystemConfig["controller_mode"] != "cc") { extraOptions["Options/Sideways Wiimote"] = "1"; wiiMapping[InputKey.x] = "Buttons/B"; wiiMapping[InputKey.y] = "Buttons/A"; wiiMapping[InputKey.a] = "Buttons/2"; wiiMapping[InputKey.b] = "Buttons/1"; //wiiMapping[InputKey.l2] = "Shake/X"; //wiiMapping[InputKey.l2] = "Shake/Y"; wiiMapping[InputKey.l2] = "Shake/Z"; } // i: infrared, s: swing, t: tilt, n: nunchuk // 12 possible combinations : is si / it ti / in ni / st ts / sn ns / tn nt // i if (rom.Contains(".is.") || rom.Contains(".it.") || rom.Contains(".in.") || (Program.SystemConfig.isOptSet("controller_mode") && Program.SystemConfig["controller_mode"] != "disabled" && Program.SystemConfig["controller_mode"] != "in" && Program.SystemConfig["controller_mode"] != "cc")) { wiiMapping[InputKey.joystick1up] = "IR/Up"; wiiMapping[InputKey.joystick1left] = "IR/Left"; } if (rom.Contains(".si.") || rom.Contains(".ti.") || rom.Contains(".ni.") || Program.SystemConfig["controller_mode"] == "in") { wiiMapping[InputKey.joystick2up] = "IR/Up"; wiiMapping[InputKey.joystick2left] = "IR/Left"; } // s if (rom.Contains(".si.") || rom.Contains(".st.") || rom.Contains(".sn.")) { wiiMapping[InputKey.joystick1up] = "Swing/Up"; wiiMapping[InputKey.joystick1left] = "Swing/Left"; } if (rom.Contains(".is.") || rom.Contains(".ts.") || rom.Contains(".ns.") || Program.SystemConfig["controller_mode"] == "is") { wiiMapping[InputKey.joystick2up] = "Swing/Up"; wiiMapping[InputKey.joystick2left] = "Swing/Left"; } // t if (rom.Contains(".ti.") || rom.Contains(".ts.") || rom.Contains(".tn.")) { wiiMapping[InputKey.joystick2up] = "Tilt/Forward"; wiiMapping[InputKey.joystick2left] = "Tilt/Left"; } if (rom.Contains(".it.") || rom.Contains(".st.") || rom.Contains(".nt.") || Program.SystemConfig["controller_mode"] == "it") { wiiMapping[InputKey.joystick2up] = "Tilt/Forward"; wiiMapping[InputKey.joystick2left] = "Tilt/Left"; } // n if (rom.Contains(".ni.") || rom.Contains(".ns.") || rom.Contains(".nt.") || Program.SystemConfig["controller_mode"] == "in") { extraOptions["Extension"] = "Nunchuk"; wiiMapping[InputKey.l2] = "Nunchuk/Buttons/C"; wiiMapping[InputKey.r2] = "Nunchuk/Buttons/Z"; wiiMapping[InputKey.joystick1up] = "Nunchuk/Stick/Up"; wiiMapping[InputKey.joystick1left] = "Nunchuk/Stick/Left"; } if (rom.Contains(".in.") || rom.Contains(".sn.") || rom.Contains(".tn.")) { extraOptions["Extension"] = "Nunchuk"; wiiMapping[InputKey.l2] = "Nunchuk/Buttons/C"; wiiMapping[InputKey.r2] = "Nunchuk/Buttons/Z"; wiiMapping[InputKey.joystick2up] = "Nunchuk/Stick/Up"; wiiMapping[InputKey.joystick2left] = "Nunchuk/Stick/Left"; } // cc : Classic Controller Settings if (rom.Contains(".cc.") || Program.SystemConfig["controller_mode"] == "cc") { extraOptions["Extension"] = "Classic"; wiiMapping[InputKey.x] = "Classic/Buttons/X"; wiiMapping[InputKey.y] = "Classic/Buttons/Y"; wiiMapping[InputKey.b] = "Classic/Buttons/B"; wiiMapping[InputKey.a] = "Classic/Buttons/A"; wiiMapping[InputKey.select] = "Classic/Buttons/-"; wiiMapping[InputKey.start] = "Classic/Buttons/+"; wiiMapping[InputKey.pageup] = "Classic/Triggers/L"; wiiMapping[InputKey.pagedown] = "Classic/Triggers/R"; wiiMapping[InputKey.l2] = "Classic/Buttons/ZL"; wiiMapping[InputKey.r2] = "Classic/Buttons/ZR"; wiiMapping[InputKey.up] = "Classic/D-Pad/Up"; wiiMapping[InputKey.down] = "Classic/D-Pad/Down"; wiiMapping[InputKey.left] = "Classic/D-Pad/Left"; wiiMapping[InputKey.right] = "Classic/D-Pad/Right"; wiiMapping[InputKey.joystick1up] = "Classic/Left Stick/Up"; wiiMapping[InputKey.joystick1left] = "Classic/Left Stick/Left"; wiiMapping[InputKey.joystick2up] = "Classic/Right Stick/Up"; wiiMapping[InputKey.joystick2left] = "Classic/Right Stick/Left"; } generateControllerConfig_any(path, "WiimoteNew.ini", "Wiimote", wiiMapping, wiiReverseAxes, null, extraOptions); }