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