From 38f94c4f0f523824c2316616c18e10ce71a86e19 Mon Sep 17 00:00:00 2001 From: teatov Date: Thu, 31 Jul 2025 12:12:18 +1000 Subject: [PATCH] make existing keys consider swapping with the closest replacement key when regenerating --- scripts/game_keyboard.gd | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/game_keyboard.gd b/scripts/game_keyboard.gd index 24f582f..f4010f6 100644 --- a/scripts/game_keyboard.gd +++ b/scripts/game_keyboard.gd @@ -259,9 +259,17 @@ func _regenerate_row( var dict_key := Vector2i(key_props.physical_keycode, key_props.location) if current_keys.has(dict_key): - var game_key := current_keys[dict_key].pop_front() as GameKey - game_key.load_props(key_props, key_default_pos) - if current_keys[dict_key].size() == 0: + var game_keys := current_keys[dict_key] as Array[GameKey] + var game_key_idx: int + var min_dist: float = 0 + for i in range(game_keys.size()): + var dist := game_keys[i].position.distance_to(key_default_pos) + if min_dist == 0 or dist <= min_dist: + min_dist = dist + game_key_idx = i + game_keys[game_key_idx].load_props(key_props, key_default_pos) + game_keys.remove_at(game_key_idx) + if game_keys.size() == 0: current_keys.erase(dict_key) else: var props_dict := LayoutConfig.get_key_config_dict(