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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user