show achievements in the menu
This commit is contained in:
parent
8f796c92fa
commit
cb90846b6f
62
src/menu.rs
62
src/menu.rs
|
@ -37,6 +37,7 @@ impl Plugin for MenuPlugin {
|
||||||
#[derive(Resource)] pub struct DeathScreenInputDelayTimer(pub Timer);
|
#[derive(Resource)] pub struct DeathScreenInputDelayTimer(pub Timer);
|
||||||
#[derive(Component)] pub struct MenuElement;
|
#[derive(Component)] pub struct MenuElement;
|
||||||
#[derive(Component)] pub struct MenuTopLevel;
|
#[derive(Component)] pub struct MenuTopLevel;
|
||||||
|
#[derive(Component)] pub struct MenuAchievements;
|
||||||
#[derive(Component)] pub struct DeathScreenElement;
|
#[derive(Component)] pub struct DeathScreenElement;
|
||||||
#[derive(Component)] pub struct DeathText;
|
#[derive(Component)] pub struct DeathText;
|
||||||
#[derive(Event)] pub struct UpdateMenuEvent;
|
#[derive(Event)] pub struct UpdateMenuEvent;
|
||||||
|
@ -181,6 +182,52 @@ pub fn setup(
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let style_achievement_header = TextStyle {
|
||||||
|
font: font_handle.clone(),
|
||||||
|
font_size: settings.font_size_achievement_header,
|
||||||
|
color: settings.hud_color_achievement_header,
|
||||||
|
..default()
|
||||||
|
};
|
||||||
|
let style_achievement = TextStyle {
|
||||||
|
font: font_handle.clone(),
|
||||||
|
font_size: settings.font_size_achievement,
|
||||||
|
color: settings.hud_color_achievement,
|
||||||
|
..default()
|
||||||
|
};
|
||||||
|
|
||||||
|
commands.spawn((
|
||||||
|
MenuElement,
|
||||||
|
NodeBundle {
|
||||||
|
style: Style {
|
||||||
|
width: Val::Percent(100.0),
|
||||||
|
height: Val::Percent(100.0),
|
||||||
|
align_items: AlignItems::Start,
|
||||||
|
justify_content: JustifyContent::Start,
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
visibility: Visibility::Hidden,
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
)).with_children(|builder| {
|
||||||
|
let mut sections = vec![
|
||||||
|
TextSection::new("Achievements\n", style_achievement_header)
|
||||||
|
];
|
||||||
|
sections.extend(Vec::from_iter((0..var::ACHIEVEMENT_COUNT).map(|_|
|
||||||
|
TextSection::new("", style_achievement.clone())
|
||||||
|
)));
|
||||||
|
builder.spawn((
|
||||||
|
MenuAchievements,
|
||||||
|
TextBundle {
|
||||||
|
text: Text {
|
||||||
|
sections,
|
||||||
|
justify: JustifyText::Left,
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn show_deathscreen(
|
pub fn show_deathscreen(
|
||||||
|
@ -250,7 +297,9 @@ pub struct MenuState {
|
||||||
|
|
||||||
pub fn update_menu(
|
pub fn update_menu(
|
||||||
mut q_text: Query<&mut Text, With<MenuTopLevel>>,
|
mut q_text: Query<&mut Text, With<MenuTopLevel>>,
|
||||||
|
mut q_achievement_text: Query<&mut Text, (With<MenuAchievements>, Without<MenuTopLevel>)>,
|
||||||
mut q_vis: Query<&mut Visibility, With<menu::MenuElement>>,
|
mut q_vis: Query<&mut Visibility, With<menu::MenuElement>>,
|
||||||
|
achievement_tracker: Res<var::AchievementTracker>,
|
||||||
menustate: Res<MenuState>,
|
menustate: Res<MenuState>,
|
||||||
settings: Res<Settings>,
|
settings: Res<Settings>,
|
||||||
) {
|
) {
|
||||||
|
@ -260,6 +309,19 @@ pub fn update_menu(
|
||||||
fn bool2string(boolean: bool) -> String {
|
fn bool2string(boolean: bool) -> String {
|
||||||
if boolean { "On" } else { "Off" }.to_string()
|
if boolean { "On" } else { "Off" }.to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let 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] {
|
||||||
|
settings.hud_color_achievement_accomplished
|
||||||
|
} else {
|
||||||
|
settings.hud_color_achievement
|
||||||
|
};
|
||||||
|
text.sections[i + 1].value = rendered[i].clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
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 {
|
||||||
|
|
42
src/var.rs
42
src/var.rs
|
@ -20,6 +20,7 @@ use toml_edit::DocumentMut;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
|
pub const ACHIEVEMENT_COUNT: usize = 5;
|
||||||
pub const SCOPE_SEPARATOR: &str = "$";
|
pub const SCOPE_SEPARATOR: &str = "$";
|
||||||
|
|
||||||
pub const TOKEN_EQUALS: &str = "==";
|
pub const TOKEN_EQUALS: &str = "==";
|
||||||
|
@ -56,6 +57,8 @@ pub struct Settings {
|
||||||
pub font_size_deathtext: f32,
|
pub font_size_deathtext: f32,
|
||||||
pub font_size_deathsubtext: f32,
|
pub font_size_deathsubtext: f32,
|
||||||
pub font_size_deathpoem: f32,
|
pub font_size_deathpoem: f32,
|
||||||
|
pub font_size_achievement: f32,
|
||||||
|
pub font_size_achievement_header: f32,
|
||||||
pub hud_color: Color,
|
pub hud_color: Color,
|
||||||
pub hud_color_fps: Color,
|
pub hud_color_fps: Color,
|
||||||
pub hud_color_console: Color,
|
pub hud_color_console: Color,
|
||||||
|
@ -66,6 +69,9 @@ pub struct Settings {
|
||||||
pub hud_color_choices: Color,
|
pub hud_color_choices: Color,
|
||||||
pub hud_color_speedometer: Color,
|
pub hud_color_speedometer: Color,
|
||||||
pub hud_color_deathpoem: Color,
|
pub hud_color_deathpoem: Color,
|
||||||
|
pub hud_color_achievement: Color,
|
||||||
|
pub hud_color_achievement_header: Color,
|
||||||
|
pub hud_color_achievement_accomplished: Color,
|
||||||
pub chat_speed: f32,
|
pub chat_speed: f32,
|
||||||
pub flashlight_active: bool,
|
pub flashlight_active: bool,
|
||||||
pub hud_active: bool,
|
pub hud_active: bool,
|
||||||
|
@ -169,6 +175,8 @@ impl Default for Settings {
|
||||||
font_size_deathtext: 64.0,
|
font_size_deathtext: 64.0,
|
||||||
font_size_deathsubtext: 32.0,
|
font_size_deathsubtext: 32.0,
|
||||||
font_size_deathpoem: 18.0,
|
font_size_deathpoem: 18.0,
|
||||||
|
font_size_achievement: 24.0,
|
||||||
|
font_size_achievement_header: 32.0,
|
||||||
hud_color: Color::hex("#BE1251").unwrap(),
|
hud_color: Color::hex("#BE1251").unwrap(),
|
||||||
hud_color_fps: Color::hex("#181818").unwrap(),
|
hud_color_fps: Color::hex("#181818").unwrap(),
|
||||||
hud_color_console: Color::hex("#BE1251").unwrap(),
|
hud_color_console: Color::hex("#BE1251").unwrap(),
|
||||||
|
@ -179,6 +187,9 @@ impl Default for Settings {
|
||||||
hud_color_choices: Color::hex("#727272").unwrap(),
|
hud_color_choices: Color::hex("#727272").unwrap(),
|
||||||
hud_color_speedometer: Color::hex("#BE1251").unwrap(),
|
hud_color_speedometer: Color::hex("#BE1251").unwrap(),
|
||||||
hud_color_deathpoem: Color::hex("#CC2200").unwrap(),
|
hud_color_deathpoem: Color::hex("#CC2200").unwrap(),
|
||||||
|
hud_color_achievement: Color::hex("#666666").unwrap(),
|
||||||
|
hud_color_achievement_accomplished: Color::hex("#F0D50C").unwrap(),
|
||||||
|
hud_color_achievement_header: Color::hex("#BE1251").unwrap(),
|
||||||
chat_speed: DEFAULT_CHAT_SPEED * if dev_mode { 2.5 } else { 1.0 },
|
chat_speed: DEFAULT_CHAT_SPEED * if dev_mode { 2.5 } else { 1.0 },
|
||||||
flashlight_active: false,
|
flashlight_active: false,
|
||||||
hud_active: true,
|
hud_active: true,
|
||||||
|
@ -302,6 +313,37 @@ pub struct AchievementTracker {
|
||||||
pub all_people: HashSet<String>,
|
pub all_people: HashSet<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl AchievementTracker {
|
||||||
|
pub fn to_bool_vec(&self) -> Vec<bool> {
|
||||||
|
vec![
|
||||||
|
self.repair_suit,
|
||||||
|
self.drink_a_pizza,
|
||||||
|
self.ride_every_vehicle,
|
||||||
|
self.talk_to_everyone,
|
||||||
|
self.in_jupiters_shadow,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
pub fn to_textsections(&self) -> Vec<String> {
|
||||||
|
fn bool2string(boolean: bool) -> String {
|
||||||
|
if boolean { "achieved" } else { "not achieved" }.to_string()
|
||||||
|
}
|
||||||
|
vec![
|
||||||
|
format!("Repair Your Suit ({})\n",
|
||||||
|
bool2string(self.repair_suit)),
|
||||||
|
format!("Consume A Pizza ({})\n",
|
||||||
|
bool2string(self.drink_a_pizza)),
|
||||||
|
format!("Ride Every Vehicle ({}/{})\n",
|
||||||
|
self.vehicles_ridden.len(),
|
||||||
|
self.all_vehicles.len()),
|
||||||
|
format!("Talk To Everyone ({}/{})\n",
|
||||||
|
self.people_talked_to.len(),
|
||||||
|
self.all_people.len()),
|
||||||
|
format!("Let Jupiter Eclipse The Sun ({})\n",
|
||||||
|
bool2string(self.in_jupiters_shadow)),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Resource, Deserialize, Debug, Default)]
|
#[derive(Resource, Deserialize, Debug, Default)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct Preferences {
|
pub struct Preferences {
|
||||||
|
|
Loading…
Reference in a new issue