ed_journals/modules/logs/content/log_event_content/engineer_progress_event.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
//! Includes information about engineer progress.
use crate::civilization::Engineer;
use serde::{Deserialize, Serialize};
/// Includes information about engineer progress.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase", untagged)]
pub enum EngineerProgressEvent {
/// Fired during startup and includes current engineer progress.
Startup(EngineerProgressStartup),
/// Fired when the player progresses with an engineer.
Update(EngineerProgressUpdate),
}
/// Fired during startup and includes current engineer progress.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerProgressStartup {
/// List of current engineer progress.
pub engineers: Vec<EngineerProgressStartupEntry>,
}
/// Entry for a single engineer and the progress.
// TODO the data for this struct is so inconsistent, it could use some work.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerProgressStartupEntry {
/// The name of the engineer.
pub engineer: Option<String>,
/// The id of the engineer.
#[serde(rename = "EngineerID")]
pub engineer_id: Option<Engineer>,
// TODO somehow this is optional even when the [rank] field is present? Why Frontier?!
/// The current progress unlock status.
pub progress: Option<EngineerProgressStartupProgress>,
/// The currently unlocked rank or highest possible 'tier' for the engineer.
pub rank: Option<u8>,
/// The current progress towards the next rank.
pub rank_progress: Option<f32>,
}
/// The status for a given engineer.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub enum EngineerProgressStartupProgress {
/// The engineer has been unlocked and the player can apply upgrades at this engineer.
Unlocked,
/// The player has been invited to the engineer, but still needs to complete their unlock task.
Invited,
/// The engineer is known, but the player has not unlocked the engineer or has been invited.
Known,
}
/// Fired when the player progresses with an engineer.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerProgressUpdate {
/// The name of the engineer.
pub engineer: String,
/// The id of the engineer.
#[serde(rename = "EngineerID")]
pub engineer_id: Engineer,
// TODO somehow this is optional even when the [rank] field is present? Why Frontier?!
/// The current progress unlock status.
pub progress: Option<EngineerProgressStartupProgress>,
/// The currently unlocked rank or highest possible 'tier' for the engineer.
pub rank: Option<u8>,
/// The current progress towards the next rank.
pub rank_progress: Option<f32>,
}