/// <summary> /// Execute when quiting this app. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_Closed(object sender, EventArgs e) { try { if (appReg == null) { return; } // Save UI Properties(Like Button Status). appProperties.SaveUISetup(); if (ApplicationOverride.IsChecked == false) { appReg.getOverrideWriter().Execute(inGameAxis, deviceControl, keyFile); } } catch (FileNotFoundException ex) { Console.WriteLine(ex.Message); StreamWriter sw = new StreamWriter(appReg.GetInstallDir() + "\\Error.txt", false, System.Text.Encoding.GetEncoding("shift_jis")); sw.Write(ex.Message); sw.Close(); MessageBox.Show("Error Log Saved To " + appReg.GetInstallDir() + "\\Error.txt", "WARNING", MessageBoxButton.OK, MessageBoxImage.Information); Close(); } }
/// <summary> /// Execute when quiting this app. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_Closed(object sender, EventArgs e) { try { Torrent.status = false; if (appReg == null) { return; } // Save UI Properties(Like Button Status). appProperties.SaveUISetup(); if (ApplicationOverride.IsChecked == false) { appReg.getOverrideWriter().Execute(inGameAxis, deviceControl, keyFile); } } catch (Exception ex) { Diagnostics.WriteLogFile(ex); Close(); } }
/// <summary> /// Make new instance. /// </summary> public void ImportStockSetup(AppRegInfo appReg, int devcount, int povnum, int joynum) { Invoke invokeStatus = Invoke.UI; Behaviour behaviourStatus = Behaviour.Press; string deviceSorting = appReg.GetInstallDir() + "/User/Config/DeviceSorting.txt"; if (Path.GetFileName(deviceSorting) != "DeviceSorting.txt") { return; } if (File.Exists(deviceSorting) == false) { return; } string[] lines = File.ReadAllLines(deviceSorting, Encoding.UTF8); int currentID = -1; for (int i = 0; i < lines.Length; i++) { if (lines[i] == GetDeviceSortingLine().Replace("\r\n", "")) { currentID = i; } } if (currentID == -1) { return; } string keyfile = appReg.GetInstallDir() + "/User/Config/" + appReg.getKeyFileName(); string[] Klines = File.ReadAllLines(keyfile, Encoding.UTF8); foreach (string stBuffer in Klines) { string[] stArrayData = stBuffer.Split(' '); if (stArrayData.Length < 7) { continue; } if (stBuffer.Substring(0, 1) == "#") { continue; } if (stArrayData[3] == "-2" | stArrayData[3] == "-3") { if (stArrayData[2] == "-1") { invokeStatus = Invoke.Default; } if (stArrayData[2] == "-2") { invokeStatus = Invoke.Down; } if (stArrayData[2] == "-4") { invokeStatus = Invoke.Up; } if (stArrayData[2] == "8") { invokeStatus = Invoke.UI; } if (stArrayData[3] == "0") { behaviourStatus = Behaviour.Press; } if (stArrayData[3] == "0x42") { behaviourStatus = Behaviour.Release; } } // Import DX Setup if (stArrayData[3] == "-2") { for (int i = 0; i < 32; i++) { if (int.Parse(stArrayData[1]) == i + currentID * 32) { dx[i].Assign(stArrayData[0], Pinky.UnShift, behaviourStatus, invokeStatus, 0); } if (int.Parse(stArrayData[1]) == i + currentID * 32 + devcount * 32) // Okay This has to be the problem. I have to read FalconBMS.cfg for { dx[i].Assign(stArrayData[0], Pinky.Shift, behaviourStatus, invokeStatus, 0); } } } // Import POV Setup if (stArrayData[3] == "-3") { for (int i = 0; i < 4; i++) { if (int.Parse(stArrayData[1]) != i) { continue; } if (povnum < 3) { if (i == 0 | i == 1) { pov[i].direction[int.Parse(stArrayData[4])].Assign(stArrayData[0], Pinky.UnShift, 0); } if (i == 2 | i == 3) { pov[i - 2].direction[int.Parse(stArrayData[4])].Assign(stArrayData[0], Pinky.Shift, 0); } continue; } pov[i].direction[int.Parse(stArrayData[4])].Assign(stArrayData[0], Pinky.UnShift, 0); } } // Import Axis Setup string filename = appReg.GetInstallDir() + "/User/Config/axismapping.dat"; if (!File.Exists(filename)) { return; } FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); byte[] ad = new byte[fs.Length]; fs.Read(ad, 0, ad.Length); fs.Close(); filename = appReg.GetInstallDir() + "/User/Config/joystick.cal"; if (!File.Exists(filename)) { return; } fs = new FileStream(filename, FileMode.Open, FileAccess.Read); byte[] jc = new byte[fs.Length]; fs.Read(jc, 0, jc.Length); fs.Close(); AxisName[] axisMappingList = appReg.getOverrideWriter().getAxisMappingList(); AxisName[] joystickCalList = appReg.getOverrideWriter().getJoystickCalList(); for (int i = 0; i < axisMappingList.Length; i++) { for (int ii = 0; ii < devcount; ii++) { if (ad[24 + i * 16] == currentID + 2) { int axisNum = ad[24 + i * 16 + 4]; AxCurve deadzone = AxCurve.None; if (ad[24 + i * 16 + 8] == 0x64) { deadzone = AxCurve.Small; } if (ad[24 + i * 16 + 8] == 0xF4) { deadzone = AxCurve.Medium; } if (ad[24 + i * 16 + 8] == 0xE8) { deadzone = AxCurve.Large; } AxCurve saturation = AxCurve.None; if (ad[24 + i * 16 + 12] == 0x1C) { saturation = AxCurve.Small; } if (ad[24 + i * 16 + 12] == 0x28) { saturation = AxCurve.Medium; } if (ad[24 + i * 16 + 12] == 0x34) { saturation = AxCurve.Large; } bool invert = false; for (int iii = 0; iii < joystickCalList.Length; iii++) { // read joystick.cal if (axisMappingList[i] != joystickCalList[iii]) { continue; } int invertnum = jc[iii * 28 + 20]; if (invertnum == 1) { invert = true; } } InGameAxAssgn inGameAxAssgn = new InGameAxAssgn(currentID, axisNum, invert, deadzone, saturation); axis[axisNum] = new AxAssgn(axisMappingList[i].ToString(), inGameAxAssgn); } } } } }
/// <summary> /// As the name implies... /// </summary> protected virtual void SaveJoystickCal(Hashtable inGameAxis, DeviceControl deviceControl) { string filename = appReg.GetInstallDir() + "/User/Config/joystick.cal"; string fbackupname = appReg.GetInstallDir() + "/User/Config/Backup/joystick.cal"; if (!File.Exists(fbackupname) & File.Exists(filename)) { File.Copy(filename, fbackupname, true); } if (File.Exists(filename)) { File.SetAttributes(filename, File.GetAttributes(filename) & ~FileAttributes.ReadOnly); } FileStream fs = new FileStream (filename, FileMode.Create, FileAccess.Write); byte[] bs; AxisName[] localJoystickCalList = appReg.getOverrideWriter().getJoystickCalList(); foreach (AxisName nme in localJoystickCalList) { bs = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x98, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; if (((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber() != -1) { bs[12] = 0x01; if (nme == AxisName.Throttle) { if (((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber() >= 0) { double iAB = deviceControl.joyAssign[((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber()].detentPosition.GetAB(); double iIdle = deviceControl.joyAssign[((InGameAxAssgn)inGameAxis[nme.ToString()]).GetDeviceNumber()].detentPosition.GetIDLE(); const double MAXIN = 65536; const double MAXOUT = 14848; iAB = -iAB * (MAXOUT / MAXIN) + MAXOUT; iIdle = -iIdle * (MAXOUT / MAXIN) + MAXOUT; byte[] ab = BitConverter.GetBytes((int)iAB); byte[] idle = BitConverter.GetBytes((int)iIdle); bs[1] = ab[1]; bs[5] = idle[1]; } } } if (((InGameAxAssgn)inGameAxis[nme.ToString()]).GetInvert()) { bs[20] = 0x01; } fs.Write(bs, 0, bs.Length); } fs.Close(); }