1use rosu_map::section::general::GameMode;
2
3use crate::{
4 model::{
5 beatmap::Beatmap,
6 mode::{ConvertError, IGameMode},
7 },
8 Difficulty, GameMods,
9};
10
11pub use self::{
12 attributes::{ManiaDifficultyAttributes, ManiaPerformanceAttributes},
13 difficulty::gradual::ManiaGradualDifficulty,
14 performance::{gradual::ManiaGradualPerformance, ManiaPerformance},
15 score_state::ManiaScoreState,
16 strains::ManiaStrains,
17};
18
19mod attributes;
20mod convert;
21mod difficulty;
22mod object;
23mod performance;
24mod score_state;
25mod strains;
26
27pub struct Mania;
31
32impl Mania {
33 pub(crate) fn convert(map: &mut Beatmap, mods: &GameMods) {
34 debug_assert!(!map.is_convert && map.mode == GameMode::Osu);
35 convert::convert(map, mods);
36 }
37}
38
39impl IGameMode for Mania {
40 type DifficultyAttributes = ManiaDifficultyAttributes;
41 type Strains = ManiaStrains;
42 type Performance<'map> = ManiaPerformance<'map>;
43 type GradualDifficulty = ManiaGradualDifficulty;
44 type GradualPerformance = ManiaGradualPerformance;
45
46 fn difficulty(
47 difficulty: &Difficulty,
48 map: &Beatmap,
49 ) -> Result<Self::DifficultyAttributes, ConvertError> {
50 difficulty::difficulty(difficulty, map)
51 }
52
53 fn strains(difficulty: &Difficulty, map: &Beatmap) -> Result<Self::Strains, ConvertError> {
54 strains::strains(difficulty, map)
55 }
56
57 fn performance(map: &Beatmap) -> Self::Performance<'_> {
58 ManiaPerformance::new(map)
59 }
60
61 fn gradual_difficulty(
62 difficulty: Difficulty,
63 map: &Beatmap,
64 ) -> Result<Self::GradualDifficulty, ConvertError> {
65 ManiaGradualDifficulty::new(difficulty, map)
66 }
67
68 fn gradual_performance(
69 difficulty: Difficulty,
70 map: &Beatmap,
71 ) -> Result<Self::GradualPerformance, ConvertError> {
72 ManiaGradualPerformance::new(difficulty, map)
73 }
74}