1use crate::items::AttributeId;
2use crate::prelude::*;
3use std::collections::BTreeMap;
4
5#[declare]
6pub type StatueBonusGradeId = Uuid;
7
8#[derive(
10 Default,
11 PartialEq,
12 Eq,
13 Hash,
14 Debug,
15 Clone,
16 Serialize,
17 Deserialize,
18 Tsify,
19 JsonSchema,
20 i18n::Translate,
21)]
22pub struct StatueBonusGrade {
23 #[schemars(schema_with = "id_schema")]
24 pub id: StatueBonusGradeId,
25
26 #[schemars(title = "Название грейда")]
27 #[translate]
28 pub name: i18n::I18nString,
29
30 #[schemars(title = "Цвет грейда", schema_with = "color_schema")]
31 pub color: String,
32
33 #[schemars(
34 title = "Порядок",
35 description = "Порядок грейда, чем меньше значение - тем ниже грейд"
36 )]
37 pub order: i64,
38}
39
40#[derive(Default, PartialEq, Eq, Hash, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
42pub struct StatueBonusSlot {
43 #[schemars(schema_with = "attribute_link_id_schema")]
44 pub attribute_id: AttributeId,
45
46 pub grade_id: StatueBonusGradeId,
47
48 pub is_locked: bool,
49}
50
51#[derive(Default, PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
54pub struct StatueSlotsMap(pub BTreeMap<u8, StatueBonusSlot>);
55
56#[derive(Default, PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
58pub struct StatueSet {
59 pub name: String,
60 pub slots: StatueSlotsMap,
61}
62
63#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
65pub struct StatueState {
66 pub level: i64,
67 pub experience: i64,
68
69 pub active_set_index: u8,
71
72 pub sets: Vec<StatueSet>,
74}
75
76impl Default for StatueState {
77 fn default() -> Self {
78 Self {
79 level: 1,
80 experience: 0,
81 active_set_index: 0,
82 sets: vec![],
83 }
84 }
85}