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(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/// Один заполненный слот на вкладке статуи
28#[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/// Карта слотов статуи: ключ — индекс слота, значение — заполненный слот.
39/// Отсутствующий ключ означает, что слот ещё не был прокатан (pending).
40#[derive(Default, PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
41pub struct StatueSlotsMap(pub BTreeMap<u8, StatueBonusSlot>);
42
43/// Один сет (вкладка) статуи — Set 1 / Set 2 / Set 3
44#[derive(Default, PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
45pub struct StatueSet {
46    pub name: String,
47    pub slots: StatueSlotsMap,
48}
49
50/// Полное состояние статуи игрока
51#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize, Tsify, JsonSchema)]
52pub struct StatueState {
53    pub level: i64,
54    pub experience: i64,
55
56    /// Индекс активного сета (0–2)
57    pub active_set_index: u8,
58
59    /// Сеты статуи (1–3 в зависимости от уровня)
60    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}