implement persistent phonebook

This commit is contained in:
yuni 2024-10-26 22:01:52 +02:00
parent b9708f7839
commit c787e7caf4
4 changed files with 41 additions and 11 deletions

View file

@ -26,6 +26,8 @@ pub const CHATS: &[&str] = &[
include_str!("chats/thebe.yaml"),
];
pub const CONTACTS: &[&str] = &["icarus", "travel", "luna", "nox"];
pub const TEXT_CONTINUE: &str = "Continue...";
pub const TOKEN_CHAT: &str = "chat";
@ -897,6 +899,7 @@ pub fn handle_chat_scripts(
mut ew_achievement: EventWriter<game::AchievementEvent>,
id2pos: Res<game::Id2Pos>,
id2v: Res<game::Id2V>,
mut prefs: ResMut<Preferences>,
) {
for script in er_chatscript.read() {
// Parse the script string
@ -1020,6 +1023,14 @@ pub fn handle_chat_scripts(
}
}
}
"registercontact" => {
if CONTACTS.contains(&param1) {
prefs.contacts.push(param1.to_string());
prefs.save();
} else {
error!("Can't register contact `{param1}', it doesn't exist in the chat::CONTACTS constant.");
}
}
_ => {
error!("Error, undefined chat script {name}");
}
@ -1030,6 +1041,7 @@ pub fn handle_chat_scripts(
pub fn update_chat_variables(
mut vars: ResMut<var::GameVars>,
settings: Res<var::Settings>,
prefs: Res<var::Preferences>,
q_player: Query<&actor::Suit, With<actor::Player>>,
) {
if let Ok(suit) = q_player.get_single() {
@ -1043,15 +1055,7 @@ pub fn update_chat_variables(
"player_suit_health_percent",
((suit.integrity * 100.0).round() as u8).to_string(),
);
vars.set_in_scope(
"$",
"ar",
if settings.hud_active {
String::from("1")
} else {
String::from("0")
},
);
vars.set_in_scope("$", "ar", bool2chatvar(settings.hud_active));
let wears_chefhat = if let Some(ava) = hud::PLAYER_AR_AVATARS.get(settings.ar_avatar) {
match ava.0 {
hud::Avatar::ChefHat => 1,
@ -1061,5 +1065,24 @@ pub fn update_chat_variables(
0
};
vars.set_in_scope("$", "chefhat", wears_chefhat.to_string());
// Set phone variables
let mut any = false;
for contact in CONTACTS {
let value = prefs.contacts.contains(&contact.to_string());
if value {
any = true;
}
vars.set_in_scope("phone", contact, bool2chatvar(value));
}
vars.set_in_scope("phone", "any", bool2chatvar(any));
}
}
fn bool2chatvar(var: bool) -> String {
if var {
String::from("1")
} else {
String::from("0")
}
}

View file

@ -1,9 +1,14 @@
- chat: phone
- if ~phone$any:
- "Error: Phonebook empty."
- goto: EXIT
- Select contact to call.
- FASTravel:
- if: phone$travel
FASTravel:
- script: changename FASTravel™ Chatbot
- This is FASTravel, how can I help you?
- Icarus:
- if: phone$icarus
Icarus:
- script: changename Icarus
- Well hi there!
- "[Cancel]":

View file

@ -14,6 +14,7 @@
- How are you doing?
- goto: howru
- Oh hey, you're awake!
- script: registercontact icarus
- set: $met
- I found you drifting out cold, and thought, I better watch over you.
- Took us here behind that moonlet, to shield you from the micrometeorites.

View file

@ -477,6 +477,7 @@ pub struct Preferences {
#[serde(default = "Preferences::default_flashlight_power")]
pub flashlight_power: usize, // 0-2
pub thruster_boost: usize, // 0-2
pub contacts: Vec<String>,
#[serde(skip)]
pub source_file: Option<String>,