@@ -28,10 +28,21 @@ uintptr_t mod_combat(cbtevent* ev, ag* src, ag* dst, char* skillname, uint64_t i
2828uintptr_t mod_imgui (uint32_t not_charsel_or_loading);
2929uintptr_t mod_options ();
3030static int changeExportPath (ImGuiTextEditCallbackData const *data);
31+ void readArcExports ();
3132void parseIni ();
3233void writeIni ();
34+ bool canMoveWindows ();
3335
3436typedef uint64_t (*arc_export_func_u64)();
37+ auto arc_dll = LoadLibraryA(TEXT(" gw2addon_arcdps.dll" ));
38+ auto arc_export_e6 = (arc_export_func_u64)GetProcAddress(arc_dll, " e6" );
39+ bool arc_movelock_altui = false ;
40+ bool arc_clicklock_altui = false ;
41+
42+ auto arc_export_e7 = (arc_export_func_u64)GetProcAddress(arc_dll, " e7" );
43+ DWORD arc_global_mod1 = 0 ;
44+ DWORD arc_global_mod2 = 0 ;
45+ DWORD arc_global_mod_multi = 0 ;
3546
3647bool show_app_log = false ;
3748AppLog log_ui;
@@ -154,6 +165,18 @@ uintptr_t mod_wnd(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
154165 }
155166 }
156167 }
168+ else if (uMsg == WM_ACTIVATEAPP) {
169+ if (!wParam)
170+ {
171+ io->KeysDown [arc_global_mod1] = false ;
172+ io->KeysDown [arc_global_mod2] = false ;
173+ }
174+ }
175+
176+ if (io->KeysDown [arc_global_mod1] && io->KeysDown [arc_global_mod2])
177+ {
178+ if (io->KeysDown [log_key] || io->KeysDown [chart_key]) return 0 ;
179+ }
157180
158181 return uMsg;
159182}
@@ -304,39 +327,46 @@ uintptr_t mod_combat(cbtevent* ev, ag* src, ag* dst, char* skillname, uint64_t i
304327
305328void ShowMechanicsLog (bool * p_open)
306329{
307- if (show_app_log) log_ui.draw (" Mechanics Log" , p_open, ImGuiWindowFlags_NoCollapse, &tracker);
330+ if (show_app_log) log_ui.draw (" Mechanics Log" , p_open, ImGuiWindowFlags_NoCollapse
331+ | (!canMoveWindows () ? ImGuiWindowFlags_NoMove : 0 ), &tracker);
308332}
309333
310334void ShowMechanicsChart (bool * p_open)
311335{
312336 if (show_app_chart)
313337 {
314- chart_ui.draw (&tracker, " Mechanics Chart" , p_open, ImGuiWindowFlags_NoCollapse, true );
338+ chart_ui.draw (&tracker, " Mechanics Chart" , p_open, ImGuiWindowFlags_NoCollapse
339+ | (!canMoveWindows () ? ImGuiWindowFlags_NoMove : 0 ), arc_clicklock_altui);
315340 }
316341}
317342
318343void ShowMechanicsOptions (bool * p_open)
319344{
320345 if (show_options)
321346 {
322- options_ui.draw (&tracker, " Mechanics Options" , p_open, ImGuiWindowFlags_NoCollapse);
347+ options_ui.draw (&tracker, " Mechanics Options" , p_open, ImGuiWindowFlags_NoCollapse
348+ | (!canMoveWindows () ? ImGuiWindowFlags_NoMove : 0 ));
323349 }
324350}
325351
326352uintptr_t mod_imgui (uint32_t not_charsel_or_loading)
327353{
328-
354+ readArcExports ();
355+
329356 if (!not_charsel_or_loading) return 0 ;
330357
331358 auto const io = &ImGui::GetIO ();
332359
333- if (ImGui::IsKeyPressed (log_key))
334- {
335- show_app_log = !show_app_log;
336- }
337- if (ImGui::IsKeyPressed (chart_key))
360+ if (io->KeysDown [arc_global_mod1] && io->KeysDown [arc_global_mod2])
338361 {
339- show_app_chart = !show_app_chart;
362+ if (ImGui::IsKeyPressed (log_key))
363+ {
364+ show_app_log = !show_app_log;
365+ }
366+ if (ImGui::IsKeyPressed (chart_key))
367+ {
368+ show_app_chart = !show_app_chart;
369+ }
340370 }
341371
342372 ShowMechanicsLog (&show_app_log);
@@ -366,6 +396,23 @@ static int changeExportPath(ImGuiTextEditCallbackData const *data)
366396 chart_ui.export_dir = data->Buf ;
367397}
368398
399+ void readArcExports ()
400+ {
401+ uint64_t e6_result = arc_export_e6 ();
402+ uint64_t e7_result = arc_export_e7 ();
403+
404+ arc_movelock_altui = (e6_result & 0x04 );
405+ arc_clicklock_altui = (e6_result & 0x08 );
406+
407+ uint16_t * ra = (uint16_t *)&e7_result;
408+ if (ra)
409+ {
410+ arc_global_mod1 = ra[0 ];
411+ arc_global_mod2 = ra[1 ];
412+ arc_global_mod_multi = ra[2 ];
413+ }
414+ }
415+
369416void parseIni ()
370417{
371418 static bool has_read_ini = false ;
@@ -439,4 +486,18 @@ void writeIni()
439486 }
440487
441488 rc = mechanics_ini.SaveFile (" addons\\ arcdps\\ arcdps_mechanics.ini" );
442- }
489+ }
490+
491+ bool canMoveWindows ()
492+ {
493+ if (!arc_movelock_altui)
494+ {
495+ return true ;
496+ }
497+ else
498+ {
499+ auto io = &ImGui::GetIO ();
500+ return io->KeysDown [arc_global_mod1] && io->KeysDown [arc_global_mod2];
501+
502+ }
503+ }
0 commit comments