essences/
statue.rs

1use crate::items::AttributeId;
2use crate::prelude::*;
3use std::collections::BTreeMap;
4
5#[declare]
6pub type StatueBonusGradeId = Uuid;
7
8/// Грейд бонуса статуи (F, D, C, B, A, S, SS, SSS, SSS+)
9#[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/// Один заполненный слот на вкладке статуи
41#[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/// Карта слотов статуи: ключ — индекс слота, значение — заполненный слот.
52/// Отсутствующий ключ означает, что слот ещё не был прокатан (pending).
53#[derive(Default, PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
54pub struct StatueSlotsMap(pub BTreeMap<u8, StatueBonusSlot>);
55
56/// Один сет (вкладка) статуи — Set 1 / Set 2 / Set 3
57#[derive(Default, PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
58pub struct StatueSet {
59    pub name: String,
60    pub slots: StatueSlotsMap,
61}
62
63/// Полное состояние статуи игрока
64#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
65pub struct StatueState {
66    pub level: i64,
67    pub experience: i64,
68
69    /// Индекс активного сета (0–2)
70    pub active_set_index: u8,
71
72    /// Сеты статуи (1–3 в зависимости от уровня)
73    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}