mirror of
https://github.com/doukutsu-rs/doukutsu-rs
synced 2024-09-28 21:19:24 +00:00
-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<String> for hopefully better descriptions -removed "Player's" from "Player's Weapon Light Cone" over redundancy and so it'd fit
This commit is contained in:
parent
824ba2c287
commit
3d1ebf76a3
|
@ -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<String>),
|
||||
Options(String, usize, Vec<String>, Vec<String>),
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Reference in a new issue