fix(input): dispatch release-handler actions on key-up

The original key-release handler owns add-player, all three nudge actions, and
F12 sound toggling. Rust dispatched those actions on the initial key press,
which changed launcher/player timing and applied nudges before the player
released the key.

Use Macroquad's key-up edges for every recovered release-handler action. Keep
F1 on key-down, flippers as held key bytes, and the launcher as press/repeat
plus release, matching their separate binary paths.

Test Plan:
- `cargo test --workspace --all-targets --all-features` -- 125 passed
- `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- passed
- `rumdl check --flavor commonmark RECONSTRUCTION.md CHANGELOG.md` -- passed
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-23 20:38:31 +02:00
parent 26b7a9ecf3
commit 1dff82aef6
3 changed files with 11 additions and 9 deletions
+8 -8
View File
@@ -46,8 +46,8 @@ fn bumper_value_indicator_count(value: u32) -> usize {
.min(BUMPER_VALUE_REGIONS.len())
}
fn add_player_pressed() -> bool {
ADD_PLAYER_KEYS.into_iter().any(is_key_pressed)
fn add_player_released() -> bool {
ADD_PLAYER_KEYS.into_iter().any(is_key_released)
}
fn visible_score_digits(mut value: u32) -> Vec<(u8, u8)> {
@@ -285,7 +285,7 @@ impl App {
}
fn handle_global_input(&mut self) {
if is_key_pressed(KeyCode::F12) {
if is_key_released(KeyCode::F12) {
self.sounds_enabled = !self.sounds_enabled;
}
if is_key_pressed(KeyCode::F1) && self.screen != Screen::NameEntry {
@@ -325,7 +325,7 @@ impl App {
fn update_attract(&mut self) {
self.attract
.update(get_frame_time(), self.saved.settings.speed);
if add_player_pressed() {
if add_player_released() {
self.game = Some(Game::new(1));
self.screen = Screen::Playing;
self.assets.play(2001, self.sounds_enabled);
@@ -333,7 +333,7 @@ impl App {
}
fn update_game(&mut self) {
if add_player_pressed()
if add_player_released()
&& self
.game
.as_mut()
@@ -349,11 +349,11 @@ impl App {
|| is_key_down(KeyCode::Enter)
|| is_key_down(KeyCode::D)
|| is_key_down(KeyCode::Right);
let nudge = if is_key_pressed(KeyCode::LeftShift) {
let nudge = if is_key_released(KeyCode::LeftShift) {
Nudge::Left
} else if is_key_pressed(KeyCode::RightShift) || is_key_pressed(KeyCode::Kp3) {
} else if is_key_released(KeyCode::RightShift) || is_key_released(KeyCode::Kp3) {
Nudge::Right
} else if is_key_pressed(KeyCode::Space) {
} else if is_key_released(KeyCode::Space) {
Nudge::Center
} else {
Nudge::None