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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//! Fired when the player applies an engineering modification to one of their ship's modules.
use crate::civilization::Engineer;
use serde::{Deserialize, Serialize};
use crate::modules::materials::Material;
use crate::modules::ship::{Blueprint, BlueprintModifier, ShipModule, ShipSlot};
/// Fired when the player applies an engineering modification to one of their ship's modules.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerCraftEvent {
/// The slot of the module being modified.
pub slot: ShipSlot,
/// The type of module being modified.
pub module: ShipModule,
/// List of paid materials for the modification. Note that these are the materials for one
/// increase in quality and not for fully upgrading the whole level.
pub ingredients: Vec<EngineerCraftEventIngredient>,
/// The name of engineer that applied the modification. In some cases where the engineer is
/// [Engineer::System] this is not set.
pub engineer: Option<String>,
/// The engineer where the player applied the modifications.
#[serde(rename = "EngineerID")]
pub engineer_id: Engineer,
/// The id of the modification the player applied.
#[serde(rename = "BlueprintID")]
pub blueprint_id: u64,
/// The name of the modification the player applied.
pub blueprint_name: Blueprint,
/// The level or 'grade' of the applied modification.
pub level: u8,
/// The quality or 'progress' of the applied modification.
pub quality: f32,
/// The modifiers that are affected by the modification.
pub modifiers: Vec<EngineerCraftEventModifier>,
}
/// A material requirement for a modification.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerCraftEventIngredient {
/// The material required.
pub name: Material,
/// The number of the given material required.
pub count: u16,
}
/// An applied modifier to the module.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerCraftEventModifier {
/// The name of the modified applied.
pub label: BlueprintModifier,
/// The kind of modifier that was applied.
#[serde(flatten)]
pub kind: EngineerCraftEventModifierKind,
}
/// The kind of applied modifier/
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(untagged)]
pub enum EngineerCraftEventModifierKind {
/// A change in a numeric value.
ValueChange(EngineerCraftEventValueChange),
/// Replacement of a certain string.
StringChange(EngineerCraftEventStringChange),
}
/// A change in a numeric value.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerCraftEventValueChange {
/// The new value of the target modifier.
pub value: f32,
/// The original value of target modifier.
pub original_value: f32,
/// Whether decreasing the value yields positive results.
pub less_is_good: u8,
}
/// Replacement of a certain string.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct EngineerCraftEventStringChange {
/// New value of the string for the given modifier.
pub value_str: String,
/// New localized value of the string for the given modifier.
#[serde(rename = "ValueStr_Localised")]
pub value_str_localized: String,
}