From da956130c5db148888c7b831b4d29d6824120455 Mon Sep 17 00:00:00 2001 From: yuni Date: Sat, 26 Oct 2024 23:11:40 +0200 Subject: [PATCH] add phonebook display under the achievements in the menu screen --- src/chat.rs | 2 ++ src/menu.rs | 39 +++++++++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/chat.rs b/src/chat.rs index 964e423..758695e 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -27,6 +27,8 @@ pub const CHATS: &[&str] = &[ ]; 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..."; diff --git a/src/menu.rs b/src/menu.rs index ab5f9b6..1e90687 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -274,6 +274,16 @@ pub fn setup( sections.extend(Vec::from_iter( (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(( MenuAchievements, TextBundle { @@ -463,8 +473,7 @@ pub fn update_menu( if boolean { "On" } else { "Off" }.to_string() } - let bools = achievement_tracker.to_bool_vec(); - let rendered = achievement_tracker.to_textsections(); + // Footer if let (Ok(mut text), Some(player_pos), Some(jupiter_pos)) = ( q_footer.get_single_mut(), id2pos.0.get(cmd::ID_PLAYER), @@ -480,16 +489,38 @@ pub fn update_menu( 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() { - for i in 0..text.sections.len() - 1 { - text.sections[i + 1].style.color = if bools[i] { + for i in 0..achievement_bools.len() - 1 { + text.sections[i + 1].style.color = if achievement_bools[i] { settings.hud_color_achievement_accomplished } else { settings.hud_color_achievement }; 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() { for i in 0..text.sections.len() { if menustate.cursor == i {