From 14bde56daf188bfc027dc8ead5b45ec0aa1109d6 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 1 Apr 2021 01:51:31 -0400 Subject: update rest grapher is still broken refactored io / error handling a bit --- converter/converter.cpp | 62 +++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 36 deletions(-) (limited to 'converter/converter.cpp') diff --git a/converter/converter.cpp b/converter/converter.cpp index 230e1be..7b71af3 100644 --- a/converter/converter.cpp +++ b/converter/converter.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -7,8 +9,6 @@ #include #include -#include - using namespace System; using namespace System::Runtime::InteropServices; using namespace Newtonsoft::Json; @@ -108,7 +108,7 @@ auto make_extractor(const ia_settings_t& ia_settings) { }; } -ra::accel_args convert_natural(const ia_settings_t& ia_settings) { +ra::accel_args convert_natural(const ia_settings_t& ia_settings, bool legacy) { auto get = make_extractor(ia_settings); double accel = get("Acceleration").value_or(0); @@ -117,8 +117,13 @@ ra::accel_args convert_natural(const ia_settings_t& ia_settings) { double prescale = get("Pre-ScaleX").value_or(1); ra::accel_args args; + args.limit = 1 + std::abs(cap - sens) / sens; - args.accel = accel * prescale / sens; + args.accel_natural = accel * prescale / sens; + args.offset = get("Offset").value_or(0); + args.mode = ra::accel_mode::natural; + args.legacy = legacy; + return args; } @@ -130,25 +135,16 @@ ra::accel_args convert_quake(const ia_settings_t& ia_settings, bool legacy) { double cap = get("SensitivityCap").value_or(0); double sens = get("Sensitivity").value_or(1); double prescale = get("Pre-ScaleX").value_or(1); - double offset = get("Offset").value_or(0); - - ra::accel_args args; - double powm1 = power - 1; - double rpowm1 = 1 / powm1; - double accel_b = std::pow(accel * prescale, powm1) / sens; - args.accel = std::pow(accel_b, rpowm1); - args.exponent = power; - args.legacy_offset = legacy; - args.offset = offset; - double cap_converted = cap / sens; + ra::accel_args args; - if (legacy || cap_converted <= 1) { - args.scale_cap = cap_converted; - } - else { - args.gain_cap = offset + std::pow(cap_converted - 1, rpowm1) / args.accel; - } + double accel_b = std::pow(accel * prescale, power - 1) / sens; + args.accel_classic = std::pow(accel_b, 1 / (power - 1)); + args.cap = cap / sens; + args.power = power; + args.offset = get("Offset").value_or(0); + args.mode = ra::accel_mode::classic; + args.legacy = legacy; return args; } @@ -168,17 +164,15 @@ bool try_convert(const ia_settings_t& ia_settings) { switch (static_cast(mode)) { case IA_QL: { - bool legacy = !ask("We recommend trying out our new cap and offset styles.\n" - "Use new cap and offset?"); - ra_settings.modes.x = ra::accel_mode::classic; + bool legacy = !ask("We recommend trying out a new smooth cap style.\n" + "Use new cap style?"); ra_settings.argsv.x = convert_quake(ia_settings, legacy); break; } case IA_NAT: { - bool nat_gain = ask("Raw Accel offers a new mode that you might like more than Natural.\n" + bool legacy = !ask("Raw Accel offers a new mode that you might like more than Natural.\n" "Wanna try it out now?"); - ra_settings.modes.x = nat_gain ? ra::accel_mode::naturalgain : ra::accel_mode::natural; - ra_settings.argsv.x = convert_natural(ia_settings); + ra_settings.argsv.x = convert_natural(ia_settings, legacy); break; } case IA_LOG: { @@ -189,7 +183,7 @@ bool try_convert(const ia_settings_t& ia_settings) { } DriverSettings^ new_settings = Marshal::PtrToStructure((IntPtr)&ra_settings); - auto errors = DriverInterop::GetSettingsErrors(new_settings); + auto errors = gcnew SettingsErrors(new_settings); if (!errors->Empty()) { Console::WriteLine("Bad settings: {0}", errors); @@ -197,7 +191,7 @@ bool try_convert(const ia_settings_t& ia_settings) { } Console::Write("Sending to driver... "); - DriverInterop::Write(new_settings); + (gcnew ManagedAccel(new_settings))->Activate(); Console::WriteLine("done"); Console::Write("Generating settings.json... "); @@ -208,10 +202,6 @@ bool try_convert(const ia_settings_t& ia_settings) { return true; } -public ref struct ASSEMBLY { - static initonly Version^ VERSION = ASSEMBLY::typeid->Assembly->GetName()->Version; -}; - int main() { auto close_prompt = [] { @@ -221,9 +211,9 @@ int main() }; try { - VersionHelper::ValidateAndGetDriverVersion(ASSEMBLY::VERSION); + VersionHelper::ValidOrThrow(); } - catch (VersionException^ ex) { + catch (InteropException^ ex) { Console::WriteLine(ex->Message); close_prompt(); } @@ -239,7 +229,7 @@ int main() entry.path().extension() == IA_PROFILE_EXT) { opt_path = entry; break; - } + } } } -- cgit v1.2.3 From 7c1f14845bc948e9ea25908e96099203d9433a69 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 6 Apr 2021 01:21:42 -0400 Subject: update wrapper + writer to handle lut grapher is building but applying options still broken for the most part --- converter/converter.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'converter/converter.cpp') diff --git a/converter/converter.cpp b/converter/converter.cpp index 7b71af3..b1761b0 100644 --- a/converter/converter.cpp +++ b/converter/converter.cpp @@ -10,6 +10,7 @@ #include using namespace System; +using namespace System::IO; using namespace System::Runtime::InteropServices; using namespace Newtonsoft::Json; @@ -181,9 +182,9 @@ bool try_convert(const ia_settings_t& ia_settings) { } default: return false; } - + DriverSettings^ new_settings = Marshal::PtrToStructure((IntPtr)&ra_settings); - auto errors = gcnew SettingsErrors(new_settings); + SettingsErrors^ errors = gcnew SettingsErrors(new_settings); if (!errors->Empty()) { Console::WriteLine("Bad settings: {0}", errors); @@ -191,12 +192,11 @@ bool try_convert(const ia_settings_t& ia_settings) { } Console::Write("Sending to driver... "); - (gcnew ManagedAccel(new_settings))->Activate(); + (gcnew ManagedAccel(gcnew ExtendedSettings(new_settings)))->Activate(); Console::WriteLine("done"); Console::Write("Generating settings.json... "); - auto json = JsonConvert::SerializeObject(new_settings, Formatting::Indented); - System::IO::File::WriteAllText("settings.json", json); + File::WriteAllText("settings.json", RaConvert::Settings(new_settings)); Console::WriteLine("done"); return true; -- cgit v1.2.3 From 258fcd3bd236a787f07d7dac2049be524d86cb75 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 6 Apr 2021 23:11:20 -0700 Subject: Fix natural legacy algorithm, rename accelNatural to decayRate --- converter/converter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'converter/converter.cpp') diff --git a/converter/converter.cpp b/converter/converter.cpp index b1761b0..70593a7 100644 --- a/converter/converter.cpp +++ b/converter/converter.cpp @@ -120,7 +120,7 @@ ra::accel_args convert_natural(const ia_settings_t& ia_settings, bool legacy) { ra::accel_args args; args.limit = 1 + std::abs(cap - sens) / sens; - args.accel_natural = accel * prescale / sens; + args.decay_rate = accel * prescale / sens; args.offset = get("Offset").value_or(0); args.mode = ra::accel_mode::natural; args.legacy = legacy; -- cgit v1.2.3 From a6926be0e911b7b7637861866f41c3bca31a87a3 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 13 Apr 2021 23:59:21 -0400 Subject: move arbitrary input into settings separate arbitrary mode from spaced modes, arbitrary now deserializes from default settings file --- converter/converter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'converter/converter.cpp') diff --git a/converter/converter.cpp b/converter/converter.cpp index 70593a7..ad92f8c 100644 --- a/converter/converter.cpp +++ b/converter/converter.cpp @@ -153,7 +153,7 @@ ra::accel_args convert_quake(const ia_settings_t& ia_settings, bool legacy) { bool try_convert(const ia_settings_t& ia_settings) { auto get = make_extractor(ia_settings); - ra::settings ra_settings; + ra::settings& ra_settings = *(new ra::settings()); ra_settings.degrees_rotation = get("Angle", "AngleAdjustment").value_or(0); ra_settings.sens = { -- cgit v1.2.3 From a31be9be457effc06571ed7acf75200eb4578d97 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 21 Sep 2021 23:57:23 -0400 Subject: remove converter questions, add notes instead --- converter/converter.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'converter/converter.cpp') diff --git a/converter/converter.cpp b/converter/converter.cpp index ad92f8c..bb76bce 100644 --- a/converter/converter.cpp +++ b/converter/converter.cpp @@ -165,15 +165,11 @@ bool try_convert(const ia_settings_t& ia_settings) { switch (static_cast(mode)) { case IA_QL: { - bool legacy = !ask("We recommend trying out a new smooth cap style.\n" - "Use new cap style?"); - ra_settings.argsv.x = convert_quake(ia_settings, legacy); + ra_settings.argsv.x = convert_quake(ia_settings, 1); break; } case IA_NAT: { - bool legacy = !ask("Raw Accel offers a new mode that you might like more than Natural.\n" - "Wanna try it out now?"); - ra_settings.argsv.x = convert_natural(ia_settings, legacy); + ra_settings.argsv.x = convert_natural(ia_settings, 1); break; } case IA_LOG: { @@ -182,7 +178,7 @@ bool try_convert(const ia_settings_t& ia_settings) { } default: return false; } - + DriverSettings^ new_settings = Marshal::PtrToStructure((IntPtr)&ra_settings); SettingsErrors^ errors = gcnew SettingsErrors(new_settings); @@ -191,6 +187,22 @@ bool try_convert(const ia_settings_t& ia_settings) { return false; } + bool nat = ra_settings.argsv.x.mode == ra::accel_mode::natural; + bool nat_or_capped = nat || ra_settings.argsv.x.cap > 0; + + if (nat_or_capped) { + Console::WriteLine("NOTE:\n" + " Raw Accel features a new cap style that is preferred by many users.\n" + " To test it out, run rawaccel.exe, check the 'Gain' option, and click 'Apply'.\n"); + } + + if (ra_settings.argsv.x.offset > 0) { + Console::WriteLine("NOTE:\n" + " Offsets in Raw Accel work a bit differently compared to InterAccel,\n" + " the '{0}' parameter may need adjustment to compensate.\n", + nat ? "decay rate" : "acceleration"); + } + Console::Write("Sending to driver... "); (gcnew ManagedAccel(gcnew ExtendedSettings(new_settings)))->Activate(); Console::WriteLine("done"); -- cgit v1.2.3 From 993900cbe46c4ec5cffff54e33cbfe5c162dbad1 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Wed, 22 Sep 2021 00:22:27 -0400 Subject: converter - use argv for IA settings path --- converter/converter.cpp | 71 ++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 31 deletions(-) (limited to 'converter/converter.cpp') diff --git a/converter/converter.cpp b/converter/converter.cpp index bb76bce..46adc02 100644 --- a/converter/converter.cpp +++ b/converter/converter.cpp @@ -214,7 +214,7 @@ bool try_convert(const ia_settings_t& ia_settings) { return true; } -int main() +int main(int argc, char** argv) { auto close_prompt = [] { std::cout << "Press any key to close this window . . ." << std::endl; @@ -222,6 +222,19 @@ int main() std::exit(0); }; + auto convert_or_print_error = [](auto&& path) { + try { + if (!try_convert(parse_ia_settings(path))) + std::cout << "Unable to convert settings.\n"; + } + catch (Exception^ e) { + Console::WriteLine("\nError: {0}", e); + } + catch (const std::exception& e) { + std::cout << "Error: " << e.what() << '\n'; + } + }; + try { VersionHelper::ValidOrThrow(); } @@ -230,42 +243,38 @@ int main() close_prompt(); } - std::optional opt_path; - - if (fs::exists(IA_SETTINGS_NAME)) { - opt_path = IA_SETTINGS_NAME; + if (argc == 2 && fs::exists(argv[1])) { + convert_or_print_error(argv[1]); } else { - for (auto&& entry : fs::directory_iterator(".")) { - if (fs::is_regular_file(entry) && - entry.path().extension() == IA_PROFILE_EXT) { - opt_path = entry; - break; - } + std::optional opt_path; + + if (fs::exists(IA_SETTINGS_NAME)) { + opt_path = IA_SETTINGS_NAME; } - } - - if (opt_path) { - std::string path = opt_path->filename().generic_string(); - std::stringstream ss; - ss << "Found " << path << - "\n\nConvert and send settings generated from " << path << '?'; - if (ask(ss.str())) { - try { - if (!try_convert(parse_ia_settings(opt_path.value()))) - std::cout << "Unable to convert settings.\n"; + else { + for (auto&& entry : fs::directory_iterator(".")) { + if (fs::is_regular_file(entry) && + entry.path().extension() == IA_PROFILE_EXT) { + opt_path = entry; + break; + } } - catch (Exception^ e) { - Console::WriteLine("\nError: {0}", e); - } - catch (const std::exception& e) { - std::cout << "Error: " << e.what() << '\n'; + } + + if (opt_path) { + std::string path = opt_path->filename().generic_string(); + std::stringstream ss; + ss << "Found " << path << + "\n\nConvert and send settings generated from " << path << '?'; + if (ask(ss.str())) { + convert_or_print_error(opt_path.value()); } } - } - else { - std::cout << "Drop your InterAccel settings/profile into this directory.\n" - "Then run this program to generate the equivalent Raw Accel settings.\n"; + else { + std::cout << "Drop your InterAccel settings/profile into this directory.\n" + "Then run this program to generate the equivalent Raw Accel settings.\n"; + } } close_prompt(); -- cgit v1.2.3 From adb528c121791f020c3bed9ff09d7623b51d76dc Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Wed, 22 Sep 2021 18:25:27 -0400 Subject: improve converter + docs remove note about not supporting prescale use relative links on conversion - flip rotation sign - set angle snapping - set domain weights to prescale --- converter/converter.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'converter/converter.cpp') diff --git a/converter/converter.cpp b/converter/converter.cpp index 46adc02..61ed877 100644 --- a/converter/converter.cpp +++ b/converter/converter.cpp @@ -115,12 +115,11 @@ ra::accel_args convert_natural(const ia_settings_t& ia_settings, bool legacy) { double accel = get("Acceleration").value_or(0); double cap = get("SensitivityCap").value_or(0); double sens = get("Sensitivity").value_or(1); - double prescale = get("Pre-ScaleX").value_or(1); ra::accel_args args; args.limit = 1 + std::abs(cap - sens) / sens; - args.decay_rate = accel * prescale / sens; + args.decay_rate = accel / sens; args.offset = get("Offset").value_or(0); args.mode = ra::accel_mode::natural; args.legacy = legacy; @@ -135,11 +134,10 @@ ra::accel_args convert_quake(const ia_settings_t& ia_settings, bool legacy) { double accel = get("Acceleration").value_or(0); double cap = get("SensitivityCap").value_or(0); double sens = get("Sensitivity").value_or(1); - double prescale = get("Pre-ScaleX").value_or(1); ra::accel_args args; - double accel_b = std::pow(accel * prescale, power - 1) / sens; + double accel_b = std::pow(accel, power - 1) / sens; args.accel_classic = std::pow(accel_b, 1 / (power - 1)); args.cap = cap / sens; args.power = power; @@ -155,10 +153,14 @@ bool try_convert(const ia_settings_t& ia_settings) { ra::settings& ra_settings = *(new ra::settings()); - ra_settings.degrees_rotation = get("Angle", "AngleAdjustment").value_or(0); + vec2d prescale = { get("Pre-ScaleX").value_or(1), get("Pre-ScaleY").value_or(1) }; + + ra_settings.dom_args.domain_weights = prescale; + ra_settings.degrees_rotation = -1 * get("Angle", "AngleAdjustment").value_or(0); + ra_settings.degrees_snap = get("AngleSnapping").value_or(0); ra_settings.sens = { - get("Post-ScaleX").value_or(1) * get("Pre-ScaleX").value_or(1), - get("Post-ScaleY").value_or(1) * get("Pre-ScaleY").value_or(1) + get("Post-ScaleX").value_or(1) * prescale.x, + get("Post-ScaleY").value_or(1) * prescale.y }; double mode = get("AccelMode").value_or(IA_QL); -- cgit v1.2.3