From 470bdaeeb4f70b2be2d663b65add88da338a63b6 Mon Sep 17 00:00:00 2001 From: Mathias Malmqvist Date: Wed, 30 Jul 2025 01:55:13 +0200 Subject: [PATCH] Switch active stick based on stick movement --- core.js | 47 +++++++++++++++++++++++++++++++++++++++++++---- index.html | 11 ++++++----- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/core.js b/core.js index a29c167..aab072b 100644 --- a/core.js +++ b/core.js @@ -23,7 +23,7 @@ let finetune_visible = false let on_finetune_updating = false // Active stick tracking for finetune modal -let active_stick = 'left' // 'left' or 'right' +let active_stick = null // 'left', 'right', or null // Continuous D-pad adjustment tracking let dpad_adjustment_interval = null @@ -1340,7 +1340,6 @@ function ds5_finetune_update_all() { function highlight_active_finetune_input() { const sticks = ds_button_states.sticks; - const currentStick = sticks[active_stick]; const deadzone = 0.3; // Clear highlights from all inputs first @@ -1355,7 +1354,10 @@ function highlight_active_finetune_input() { $(`#finetuneStickCanvas${suffix}`).removeClass("text-primary"); }); + if(!active_stick) return; + // Only highlight if stick is moved significantly from center + const currentStick = sticks[active_stick]; if (Math.abs(currentStick.x) >= deadzone || Math.abs(currentStick.y) >= deadzone) { const quadrant = get_stick_quadrant(currentStick.x, currentStick.y); const inputSuffix = get_finetune_input_suffix_for_quadrant(active_stick, quadrant); @@ -1402,6 +1404,10 @@ function finetune_close() { } function set_stick_to_finetune(stick) { + if(active_stick === stick) { + return; + } + // Stop any continuous adjustments when switching sticks stop_continuous_dpad_adjustment(); @@ -1420,11 +1426,42 @@ function set_stick_to_finetune(stick) { } function handle_finetune_stick_switching(changes) { - if (changes.l1) { + // Handle automatic stick switching based on movement + if (changes.sticks) { + update_active_stick_based_on_movement(); + } +} + +function is_stick_away_from_center(stick_pos, deadzone = 0.2) { + return Math.abs(stick_pos.x) >= deadzone || Math.abs(stick_pos.y) >= deadzone; +} + +function update_active_stick_based_on_movement() { + const sticks = ds_button_states.sticks; + const deadzone = 0.2; + + const left_is_away = is_stick_away_from_center(sticks.left, deadzone); + const right_is_away = is_stick_away_from_center(sticks.right, deadzone); + + if (left_is_away && right_is_away) { + // Both sticks are away from center - clear highlighting + clear_active_stick(); + } else if (left_is_away && !right_is_away) { + // Only left stick is away from center set_stick_to_finetune('left'); - } else if (changes.r1) { + } else if (right_is_away && !left_is_away) { + // Only right stick is away from center set_stick_to_finetune('right'); } + // If both sticks are centered, keep current active stick (no change) +} + +function clear_active_stick() { + // Remove active class from both cards + $("#left-stick-card").removeClass("stick-card-active"); + $("#right-stick-card").removeClass("stick-card-active"); + + active_stick = null; // Clear active stick } function get_stick_quadrant(x, y) { @@ -1457,6 +1494,8 @@ function get_finetune_input_suffix_for_quadrant(stick, quadrant) { } function handle_finetune_dpad_adjustment(changes) { + if(!active_stick) return; + const sticks = ds_button_states.sticks; const currentStick = sticks[active_stick]; diff --git a/index.html b/index.html index 1324839..4620890 100644 --- a/index.html +++ b/index.html @@ -521,7 +521,7 @@ input[id^="finetune"].border-primary {