add phonebook display under the achievements in the menu screen

This commit is contained in:
yuni 2024-10-26 23:11:40 +02:00
parent 678979db7e
commit da956130c5
2 changed files with 37 additions and 4 deletions

View file

@ -27,6 +27,8 @@ pub const CHATS: &[&str] = &[
]; ];
pub const CONTACTS: &[&str] = &["icarus", "travel", "luna", "nox"]; pub const CONTACTS: &[&str] = &["icarus", "travel", "luna", "nox"];
pub const CONTACTS_PRETTY: &[&str] = &["Icarus", "FASTravel", "Luna", "Nox"];
pub const CONTACTS_UNKNOWN: &str = "[unknown]";
pub const TEXT_CONTINUE: &str = "Continue..."; pub const TEXT_CONTINUE: &str = "Continue...";

View file

@ -274,6 +274,16 @@ pub fn setup(
sections.extend(Vec::from_iter( sections.extend(Vec::from_iter(
(0..achievement_count).map(|_| TextSection::new("", style_achievement.clone())), (0..achievement_count).map(|_| TextSection::new("", style_achievement.clone())),
)); ));
sections.push(TextSection::new(
"\nPhonebook\n",
style_achievement_header.clone(),
));
sections.extend(Vec::from_iter((0..chat::CONTACTS.len()).map(|_| {
TextSection::new(
chat::CONTACTS_UNKNOWN.to_string() + "\n",
style_achievement.clone(),
)
})));
builder.spawn(( builder.spawn((
MenuAchievements, MenuAchievements,
TextBundle { TextBundle {
@ -463,8 +473,7 @@ pub fn update_menu(
if boolean { "On" } else { "Off" }.to_string() if boolean { "On" } else { "Off" }.to_string()
} }
let bools = achievement_tracker.to_bool_vec(); // Footer
let rendered = achievement_tracker.to_textsections();
if let (Ok(mut text), Some(player_pos), Some(jupiter_pos)) = ( if let (Ok(mut text), Some(player_pos), Some(jupiter_pos)) = (
q_footer.get_single_mut(), q_footer.get_single_mut(),
id2pos.0.get(cmd::ID_PLAYER), id2pos.0.get(cmd::ID_PLAYER),
@ -480,16 +489,38 @@ pub fn update_menu(
settings.version.as_str() settings.version.as_str()
); );
} }
// Achievements
let achievement_bools = achievement_tracker.to_bool_vec();
let rendered = achievement_tracker.to_textsections();
if let Ok(mut text) = q_achievement_text.get_single_mut() { if let Ok(mut text) = q_achievement_text.get_single_mut() {
for i in 0..text.sections.len() - 1 { for i in 0..achievement_bools.len() - 1 {
text.sections[i + 1].style.color = if bools[i] { text.sections[i + 1].style.color = if achievement_bools[i] {
settings.hud_color_achievement_accomplished settings.hud_color_achievement_accomplished
} else { } else {
settings.hud_color_achievement settings.hud_color_achievement
}; };
text.sections[i + 1].value = rendered[i].clone(); text.sections[i + 1].value = rendered[i].clone();
} }
// Phonebook
for (i, contact) in chat::CONTACTS.iter().enumerate() {
let text_index = i + achievement_bools.len() + 2;
let registered = prefs.contacts.contains(&contact.to_string());
text.sections[text_index].style.color = if registered {
settings.hud_color_achievement_accomplished
} else {
settings.hud_color_achievement
};
text.sections[text_index].value = if registered {
chat::CONTACTS_PRETTY[i].to_string() + "\n"
} else {
String::from(chat::CONTACTS_UNKNOWN.to_string() + "\n")
} }
}
}
// Menu
if let Ok(mut text) = q_text.get_single_mut() { if let Ok(mut text) = q_text.get_single_mut() {
for i in 0..text.sections.len() { for i in 0..text.sections.len() {
if menustate.cursor == i { if menustate.cursor == i {