From 3d1ebf76a32513f46da10c0648f93f9b24227843 Mon Sep 17 00:00:00 2001 From: Daedliy Date: Sun, 16 Jan 2022 14:52:08 -0300 Subject: [PATCH 1/2] -consistent 14/7 pixel spacing between option and selected value -fixed small bug in audio menu where cursor would select the first entry, despite being un-selectable -gave MenuEntry:Options an additional Vec for hopefully better descriptions -removed "Player's" from "Player's Weapon Light Cone" over redundancy and so it'd fit --- src/menu/mod.rs | 34 ++++++++++++++++++++++------------ src/menu/settings_menu.rs | 26 +++++++++++++++++--------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/menu/mod.rs b/src/menu/mod.rs index 2538690..29700eb 100644 --- a/src/menu/mod.rs +++ b/src/menu/mod.rs @@ -9,14 +9,13 @@ use crate::shared_game_state::SharedGameState; pub mod settings_menu; pub struct MenuSaveInfo {} - pub enum MenuEntry { Hidden, Active(String), DisabledWhite(String), Disabled(String), Toggle(String, bool), - Options(String, usize, Vec), + Options(String, usize, Vec, Vec), SaveData(MenuSaveInfo), NewSave, } @@ -29,7 +28,7 @@ impl MenuEntry { MenuEntry::DisabledWhite(_) => 14.0, MenuEntry::Disabled(_) => 14.0, MenuEntry::Toggle(_, _) => 14.0, - MenuEntry::Options(_, _, _) => 14.0, + MenuEntry::Options(_, _, _, _) => 14.0, MenuEntry::SaveData(_) => 30.0, MenuEntry::NewSave => 30.0, } @@ -42,7 +41,7 @@ impl MenuEntry { MenuEntry::DisabledWhite(_) => false, MenuEntry::Disabled(_) => false, MenuEntry::Toggle(_, _) => true, - MenuEntry::Options(_, _, _) => true, + MenuEntry::Options(_, _, _, _) => true, MenuEntry::SaveData(_) => true, MenuEntry::NewSave => true, } @@ -250,7 +249,7 @@ impl Menu { } MenuEntry::Toggle(name, value) => { let value_text = if *value { "ON" } else { "OFF" }; - let val_text_len = state.font.text_width(value_text.chars(), &state.constants); + let name_text_len = state.font.text_width(name.chars(), &state.constants); state.font.draw_text( name.chars(), @@ -263,16 +262,17 @@ impl Menu { state.font.draw_text( value_text.chars(), - self.x as f32 + self.width as f32 - val_text_len, + self.x as f32 + 25.0 + name_text_len, y, &state.constants, &mut state.texture_set, ctx, )?; } - MenuEntry::Options(name, index, value) => { + MenuEntry::Options(name, index, value, description) => { let value_text = if let Some(text) = value.get(*index) { text.as_str() } else { "???" }; - let val_text_len = state.font.text_width(value_text.chars(), &state.constants); + let description_text = if let Some(text) = description.get(*index) { text.as_str() } else { "???" }; + let name_text_len = state.font.text_width(name.chars(), &state.constants); state.font.draw_text( name.chars(), @@ -285,12 +285,22 @@ impl Menu { state.font.draw_text( value_text.chars(), - self.x as f32 + self.width as f32 - val_text_len, + self.x as f32 + 25.0 + name_text_len, y, &state.constants, &mut state.texture_set, ctx, )?; + + state.font.draw_colored_text( + description_text.chars(), + self.x as f32 + 40.0, + y + 14.0, + (0xa0, 0xa0, 0xff, 0xff), + &state.constants, + &mut state.texture_set, + ctx, + )?; } _ => {} } @@ -346,18 +356,18 @@ impl Menu { y += entry.height() as f32; match entry { - MenuEntry::Active(_) | MenuEntry::Toggle(_, _) | MenuEntry::Options(_, _, _) + MenuEntry::Active(_) | MenuEntry::Toggle(_, _) | MenuEntry::Options(_, _, _, _) if (self.selected == idx && controller.trigger_ok()) || state.touch_controls.consume_click_in(entry_bounds) => { state.sound_manager.play_sfx(18); return MenuSelectionResult::Selected(idx, entry); } - MenuEntry::Options(_, _, _) if controller.trigger_left() => { + MenuEntry::Options(_, _, _, _) if controller.trigger_left() => { state.sound_manager.play_sfx(1); return MenuSelectionResult::Left(self.selected, entry); } - MenuEntry::Options(_, _, _) if controller.trigger_right() => { + MenuEntry::Options(_, _, _, _) if controller.trigger_right() => { state.sound_manager.play_sfx(1); return MenuSelectionResult::Right(self.selected, entry); } diff --git a/src/menu/settings_menu.rs b/src/menu/settings_menu.rs index d5b3707..84f2dac 100644 --- a/src/menu/settings_menu.rs +++ b/src/menu/settings_menu.rs @@ -35,7 +35,7 @@ impl SettingsMenu { pub fn init(&mut self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult { self.graphics.push_entry(MenuEntry::Toggle("Lighting effects:".to_string(), state.settings.shader_effects)); - self.graphics.push_entry(MenuEntry::Toggle("Player's weapon light cone:".to_string(), state.settings.light_cone)); + self.graphics.push_entry(MenuEntry::Toggle("Weapon light cone:".to_string(), state.settings.light_cone)); self.graphics .push_entry(MenuEntry::Toggle("Motion interpolation:".to_string(), state.settings.motion_interpolation)); self.graphics.push_entry(MenuEntry::Toggle("Subpixel scrolling:".to_string(), state.settings.subpixel_coords)); @@ -66,24 +66,32 @@ impl SettingsMenu { "Game timing:".to_owned(), if state.settings.timing_mode == TimingMode::_50Hz { 0 } else { 1 }, vec!["50tps (freeware)".to_owned(), "60tps (CS+)".to_owned()], + vec!["".to_owned(),"".to_owned()], )); self.main.push_entry(MenuEntry::Active(DISCORD_LINK.to_owned())); self.main.push_entry(MenuEntry::Active("< Back".to_owned())); - self.sound.push_entry(MenuEntry::DisabledWhite("BGM Interpolation:".to_owned())); self.sound.push_entry(MenuEntry::Options( - "".to_owned(), + "BGM Interpolation:".to_owned(), state.settings.organya_interpolation as usize, vec![ - "Nearest (fastest, lowest quality)".to_owned(), - "Linear (fast, similar to freeware on Vista+)".to_owned(), + "Nearest".to_owned(), + "Linear".to_owned(), "Cosine".to_owned(), "Cubic".to_owned(), - "Polyphase (slowest, similar to freeware on XP)".to_owned() + "Polyphase".to_owned() + ], + vec![ + "(Fastest, lowest quality)".to_owned(), + "(Fast, similar to freeware on Vista+)".to_owned(), + "(Cosine interp)".to_owned(), + "(Cubic interp)".to_owned(), + "(Slowest, similar to freeware on XP)".to_owned() ], )); + self.sound.push_entry(MenuEntry::DisabledWhite("".to_owned())); self.sound.push_entry(MenuEntry::Disabled(format!("Soundtrack: {}", state.settings.soundtrack))); self.sound.push_entry(MenuEntry::Active("< Back".to_owned())); @@ -124,7 +132,7 @@ impl SettingsMenu { self.current = CurrentMenu::SoundMenu; } MenuSelectionResult::Selected(2, toggle) => { - if let MenuEntry::Options(_, value, _) = toggle { + if let MenuEntry::Options(_, value, _, _) = toggle { match state.settings.timing_mode { TimingMode::_50Hz => { state.settings.timing_mode = TimingMode::_60Hz; @@ -204,8 +212,8 @@ impl SettingsMenu { _ => (), }, CurrentMenu::SoundMenu => match self.sound.tick(controller, state) { - MenuSelectionResult::Selected(1, toggle) => { - if let MenuEntry::Options(_, value, _) = toggle { + MenuSelectionResult::Selected(0, toggle) => { + if let MenuEntry::Options(_, value, _, _) = toggle { let (new_mode, new_value) = match *value { 0 => (InterpolationMode::Linear, 1), 1 => (InterpolationMode::Cosine, 2), From df297819fed420dd3209ee32fd7bb94b2f3bb83e Mon Sep 17 00:00:00 2001 From: Daedliy Date: Mon, 17 Jan 2022 16:34:37 -0300 Subject: [PATCH 2/2] applying suggested changes --- src/menu/mod.rs | 50 ++++++++++++++++++++++++++++++++------- src/menu/settings_menu.rs | 11 ++++----- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/menu/mod.rs b/src/menu/mod.rs index 29700eb..0b0e7ab 100644 --- a/src/menu/mod.rs +++ b/src/menu/mod.rs @@ -9,13 +9,15 @@ use crate::shared_game_state::SharedGameState; pub mod settings_menu; pub struct MenuSaveInfo {} + pub enum MenuEntry { Hidden, Active(String), DisabledWhite(String), Disabled(String), Toggle(String, bool), - Options(String, usize, Vec, Vec), + Options(String, usize, Vec), + DescriptiveOptions(String, usize, Vec, Vec), SaveData(MenuSaveInfo), NewSave, } @@ -28,7 +30,8 @@ impl MenuEntry { MenuEntry::DisabledWhite(_) => 14.0, MenuEntry::Disabled(_) => 14.0, MenuEntry::Toggle(_, _) => 14.0, - MenuEntry::Options(_, _, _, _) => 14.0, + MenuEntry::Options(_, _, _) => 14.0, + MenuEntry::DescriptiveOptions(_, _, _, _) => 14.0, MenuEntry::SaveData(_) => 30.0, MenuEntry::NewSave => 30.0, } @@ -41,7 +44,8 @@ impl MenuEntry { MenuEntry::DisabledWhite(_) => false, MenuEntry::Disabled(_) => false, MenuEntry::Toggle(_, _) => true, - MenuEntry::Options(_, _, _, _) => true, + MenuEntry::Options(_, _, _) => true, + MenuEntry::DescriptiveOptions(_, _, _, _) => true, MenuEntry::SaveData(_) => true, MenuEntry::NewSave => true, } @@ -269,7 +273,29 @@ impl Menu { ctx, )?; } - MenuEntry::Options(name, index, value, description) => { + MenuEntry::Options(name, index, value) => { + let value_text = if let Some(text) = value.get(*index) { text.as_str() } else { "???" }; + let name_text_len = state.font.text_width(name.chars(), &state.constants); + + state.font.draw_text( + name.chars(), + self.x as f32 + 20.0, + y, + &state.constants, + &mut state.texture_set, + ctx, + )?; + + state.font.draw_text( + value_text.chars(), + self.x as f32 + 25.0 + name_text_len, + y, + &state.constants, + &mut state.texture_set, + ctx, + )?; + } + MenuEntry::DescriptiveOptions(name, index, value, description) => { let value_text = if let Some(text) = value.get(*index) { text.as_str() } else { "???" }; let description_text = if let Some(text) = description.get(*index) { text.as_str() } else { "???" }; let name_text_len = state.font.text_width(name.chars(), &state.constants); @@ -294,7 +320,7 @@ impl Menu { state.font.draw_colored_text( description_text.chars(), - self.x as f32 + 40.0, + self.x as f32 + 20.0, y + 14.0, (0xa0, 0xa0, 0xff, 0xff), &state.constants, @@ -356,18 +382,26 @@ impl Menu { y += entry.height() as f32; match entry { - MenuEntry::Active(_) | MenuEntry::Toggle(_, _) | MenuEntry::Options(_, _, _, _) + MenuEntry::Active(_) | MenuEntry::Toggle(_, _) | MenuEntry::Options(_, _, _) | MenuEntry::DescriptiveOptions(_, _, _, _) if (self.selected == idx && controller.trigger_ok()) || state.touch_controls.consume_click_in(entry_bounds) => { state.sound_manager.play_sfx(18); return MenuSelectionResult::Selected(idx, entry); } - MenuEntry::Options(_, _, _, _) if controller.trigger_left() => { + MenuEntry::Options(_, _, _) if controller.trigger_left() => { state.sound_manager.play_sfx(1); return MenuSelectionResult::Left(self.selected, entry); } - MenuEntry::Options(_, _, _, _) if controller.trigger_right() => { + MenuEntry::Options(_, _, _) if controller.trigger_right() => { + state.sound_manager.play_sfx(1); + return MenuSelectionResult::Right(self.selected, entry); + } + MenuEntry::DescriptiveOptions(_, _, _, _) if controller.trigger_left() => { + state.sound_manager.play_sfx(1); + return MenuSelectionResult::Left(self.selected, entry); + } + MenuEntry::DescriptiveOptions(_, _, _, _) if controller.trigger_right() => { state.sound_manager.play_sfx(1); return MenuSelectionResult::Right(self.selected, entry); } diff --git a/src/menu/settings_menu.rs b/src/menu/settings_menu.rs index 84f2dac..e779d49 100644 --- a/src/menu/settings_menu.rs +++ b/src/menu/settings_menu.rs @@ -66,14 +66,13 @@ impl SettingsMenu { "Game timing:".to_owned(), if state.settings.timing_mode == TimingMode::_50Hz { 0 } else { 1 }, vec!["50tps (freeware)".to_owned(), "60tps (CS+)".to_owned()], - vec!["".to_owned(),"".to_owned()], )); self.main.push_entry(MenuEntry::Active(DISCORD_LINK.to_owned())); self.main.push_entry(MenuEntry::Active("< Back".to_owned())); - self.sound.push_entry(MenuEntry::Options( + self.sound.push_entry(MenuEntry::DescriptiveOptions( "BGM Interpolation:".to_owned(), state.settings.organya_interpolation as usize, vec![ @@ -86,8 +85,8 @@ impl SettingsMenu { vec![ "(Fastest, lowest quality)".to_owned(), "(Fast, similar to freeware on Vista+)".to_owned(), - "(Cosine interp)".to_owned(), - "(Cubic interp)".to_owned(), + "(Cosine interpolation)".to_owned(), + "(Cubic interpolation)".to_owned(), "(Slowest, similar to freeware on XP)".to_owned() ], )); @@ -132,7 +131,7 @@ impl SettingsMenu { self.current = CurrentMenu::SoundMenu; } MenuSelectionResult::Selected(2, toggle) => { - if let MenuEntry::Options(_, value, _, _) = toggle { + if let MenuEntry::Options(_, value, _) = toggle { match state.settings.timing_mode { TimingMode::_50Hz => { state.settings.timing_mode = TimingMode::_60Hz; @@ -213,7 +212,7 @@ impl SettingsMenu { }, CurrentMenu::SoundMenu => match self.sound.tick(controller, state) { MenuSelectionResult::Selected(0, toggle) => { - if let MenuEntry::Options(_, value, _, _) = toggle { + if let MenuEntry::DescriptiveOptions(_, value, _, _) = toggle { let (new_mode, new_value) = match *value { 0 => (InterpolationMode::Linear, 1), 1 => (InterpolationMode::Cosine, 2),