1use schemars::JsonSchema;
2
3use serde::{Deserialize, Serialize};
4use tsify_next::Tsify;
5
6#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
7pub struct OpponentPositionSettings {
8 #[schemars(title = "Минимальная разница в рейтинге в процентах")]
9 pub min_rating_diff_percent: f64,
10
11 #[schemars(title = "Максимальная разница в рейтинге в процентах")]
12 pub max_rating_diff_percent: f64,
13
14 #[schemars(
15 title = "Максимальная позиция в рейтинге, после которой перестают генерироваться боты"
16 )]
17 pub max_rating_for_bots: u64,
18
19 #[schemars(title = "Множитель силы бота относительно рейтинга игрока")]
20 pub bot_power_multiplier: f64,
21
22 #[schemars(title = "Мин. отношение силы противника к силе игрока (пусто = без фильтра)")]
26 #[serde(default)]
27 pub min_power_ratio: Option<f64>,
28
29 #[schemars(title = "Макс. отношение силы противника к силе игрока (пусто = без фильтра)")]
30 #[serde(default)]
31 pub max_power_ratio: Option<f64>,
32}
33
34#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, Tsify)]
35pub struct MatchmakingSettings {
36 #[schemars(title = "Настройки для каждой позиции противника")]
37 pub opponent_positions: Vec<OpponentPositionSettings>,
38
39 #[schemars(title = "Порог перцентиля для переключения на альтернативный матчмейкинг")]
40 pub percentile_threshold: f64,
41
42 #[schemars(title = "Максимум ботов в списке подбора (люди в приоритете)")]
46 #[serde(default = "default_max_bots")]
47 pub max_bots: u64,
48}
49
50fn default_max_bots() -> u64 {
51 2
52}